简介

Native支付是指商户系统按微信支付协议生成支付二维码,用户再用微信“扫一扫”完成支付的模式。

#应用场景

Native支付适用于PC网站、实体店单品或订单、媒体广告支付等场景

用户扫描商户展示在各种场景的二维码进行支付,具体操作流程如下:

步骤一 商户根据微信支付的规则,为不同商品生成不同的二维码(如图3.1),展示在各种场景,用于用户扫描购买。

步骤二 用户使用微信“扫一扫”(如图3.2)扫描二维码后,获取商品支付信息,引导用户完成支付(如图3.3)。

微信支付Native支付调式_二维码

微信支付Native支付调式_API_02

微信支付Native支付调式_二维码_03

图3.1 支付二维码

图3.2 打开微信扫一扫二维码

图3.3 确认支付页面

步骤三 用户确认支付,输入支付密码(如图3.4)。

步骤四 支付完成后会提示用户支付成功(如图3.5),商户后台得到支付成功的通知,然后进行发货处理。

微信支付Native支付调式_API_04

微信支付Native支付调式_二维码_05

图3.4 用户确认支付,输入密码

图3.5 支付成功提示

 

 

php代码实现:

1》前端显示支付二维码PC端 仅支持扫码支付 不支持长按二维码完成支付

微信sdk采用的easywechat 

composer require w7corp/easywechat

//显示支付二维码 支持pc端 或者线下扫码
public function test(Request $request){
    $config = [
        // 必要配置
        'app_id'             => 'xxxxx',
        'mch_id'             => 'xxxxxx',
        'key'                => 'A1b2C3d4E5f6G7h8I9j0KlMnOpQrStUv',   // API v2 密钥 (注意: 是v2密钥 是v2密钥 是v2密钥)
        // 如需使用敏感接口(如退款、发送红包等)需要配置 API 证书路径(登录商户平台下载 API 证书)
        'cert_path'          => '/pay_cert/apiclient_cert.pem', // XXX: 绝对路径!!!!
        'key_path'           => '/pay_cert/apiclient_key.pem',      // XXX: 绝对路径!!!!
        'notify_url'         => 'xxxxxxx/open/wx/pay/callback',     // 你也可以在下单时单独设置来想覆盖它
    ];

    $app = Factory::payment($config);

    $content = $app->scheme("123");
    $img = QrCode::format('png')->size(200)->generate($content);
    $qr_code = 'data:image/png;base64,' . base64_encode($img);
    echo '<img src="'.$qr_code.'">';exit;

}

 

2》回调接口

public  function payCallback(Request $request){
        Log::info(json_encode($request->all()));


        $config = [
            // 必要配置
            'app_id'             => 'xxxxx',
            'mch_id'             => 'xxxxx',
            'key'                => 'xxxxx',   // API v2 密钥 (注意: 是v2密钥 是v2密钥 是v2密钥)
            // 如需使用敏感接口(如退款、发送红包等)需要配置 API 证书路径(登录商户平台下载 API 证书)
            'cert_path'          => '/pay_cert/apiclient_cert.pem', // XXX: 绝对路径!!!!
            'key_path'           => '/pay_cert/apiclient_key.pem',      // XXX: 绝对路径!!!!

            'notify_url'         => 'xxxxx/open/wx/pay/callback',     // 你也可以在下单时单独设置来想覆盖它
        ];

        $app = Factory::payment($config);
        $response = $app->handleScannedNotify(function ($message, $fail, $alert) use ($app) {
            Log::info(json_encode($message));
            Log::info(json_encode($fail));
            Log::info(json_encode($alert));
            // 如:$alert('商品已售空');
            // 如业务流程正常,则要调用“统一下单”接口,并返回 prepay_id 字符串,代码如下
            $result = $app->order->unify([
                'out_trade_no' => 'kefu20240911'.rand(1,99999),
                'trade_type' => 'NATIVE',
                'total_fee' => 1,
                'body' => '客服咨询支持',
//                'product_id' => $message['product_id'] ?? 123, // $message['product_id'] 则为生成二维码时的产品 ID
                // ...
            ]);
            Log::info(json_encode($result));
            return $result['prepay_id'];
        });

        $response->send();



        return "ok";
    }

 

相关请求和接收参数日志:

[2024-09-11 17:16:21] : callBack:request 参数:{"_url":"\/open\/wx\/callBack","signature":"468d8b3be71ac6ecdae1c3877329eeee6bd321ed","timestamp":"1726046181","nonce":"1322485648",
"openid":"otzk36fXsQ1tVNQ83ulCISk5hVww"}  
[2024-09-11 17:16:21] : {"ToUserName":"gh_c99244526f10","FromUserName":"otzk36fXsQ1tVNQ83ulCISk5hVww","CreateTime":"1726046181","MsgType":"event","Event":"LOCATION",
"Latitude":"22.537125","Longitude":"114.024910","Precision":"24.191069"}  
[2024-09-11 17:26:19] : {"_url":"\/open\/wx\/pay\/callback"}  
[2024-09-11 17:26:20] : {"appid":"wx82dd5de1c159bb98","openid":"otzk36QMuBbysDM_e8geEY8eAsyw","mch_id":"1685067562","is_subscribe":"N","nonce_str":"nVGs3p9pR4AZ2QAm",
"product_id":"123","sign":"63F0A0395256563DDCE1EE4657AF4646"}  
[2024-09-11 17:26:20] : [{},"fail"]  
[2024-09-11 17:26:20] : [{},"alert"]  
[2024-09-11 17:26:20] : {"return_code":"SUCCESS","return_msg":"OK","result_code":"SUCCESS","mch_id":"1685067562","appid":"wx82dd5de1c159bb98","nonce_str":"ZJLmxMII4lUdQSpg",
"sign":"630839B7E44D8657DF0435D116BA8198",
"prepay_id":"wx111726202439445ff081d1555036cf0000","trade_type":"NATIVE","code_url":"weixin:\/\/wxpay\/bizpayurl?pr=SEnksOyz1"}