PHP中的微信支付方式

Weixin Payment Method in PHP

我正在 PHP 开发中文电子商务网站。 并且我已经完成了微信支付的二维码生成url。它在 PC 上运行正常。

现在如果是平板电脑或手机网站版本,如何从网页打开微信应用程序并将二维码数据发送到微信应用程序。

这是微信的一大痛点。如果用户已经在微信浏览器中,您可以指示他们长按二​​维码,他们将看到一个弹出窗口,其中包含扫描图像中二维码的选项。

如果他们在另一个移动浏览器中,您几乎无法告诉他们截屏,然后从微信中扫描图像。

每次你生成URL你放在二维码里面你创建一个微信订单调用微信支付提供的unifiedorderUrl,对吧?使用 trade_type = NATIVE.

您需要对 URL 进行相同的调用,但使用 trade_type = JSAPI,同时添加参数 openid = wechatUserOpenId.

然后,使用返回的数据 $orderResult 您需要生成一个 json 格式的字符串,其中包含以下数据,如以下代码所示:

    $timeStamp = time();
    $jsOrder['appid']     = $orderResult['appid'];
    $jsOrder['timeStamp'] = "$timeStamp";
    $jsOrder['nonce_str'] = $this->randomGenerator->getRandomString(32);
    $jsOrder['package']   = "prepay_id=" . $orderResult['prepay_id'];
    $jsOrder['signType']  = "MD5";
    $jsOrder['paySign']   = $this->makeSignature($jsOrder);

    $parameters = json_encode($jsOrder);

获得该字符串后,在微信浏览器中显示的页面内,您需要调用 ajax 来获取它并在如下代码中使用它:

在 onClick 事件中执行 callpay():

function callpay()
{
    if (typeof WeixinJSBridge == "undefined"){
        if( document.addEventListener ){
            document.addEventListener('WeixinJSBridgeReady', jsApiCall, false);
        }else if (document.attachEvent){
            document.attachEvent('WeixinJSBridgeReady', jsApiCall); 
            document.attachEvent('onWeixinJSBridgeReady', jsApiCall);
        }
    }else{
        jsApiCall();
    }
}


function jsApiCall()
{
       var parameters = result[2];//fill it with the previous $parameters, with your preferred ajax call
       WeixinJSBridge.invoke(
       'getBrandWCPayRequest',
       parameters,
       function(res){
           console.log(res);
           switch(res.err_msg)
           {
               case "ok":
                     console.log('payment made'); 
                     paymentWasMade = true;                         
                     break;
               case "cancel":
                     break;
               case "fail":
                     break;
            }
     });
}

parametersunifiedorder微信支付API调用的格式化结果。 function(res) 在用户退出微信支付网关后调用这些可能的结果。

希望对您有所帮助。

更新:

我发现你不需要jweixin-1.0文件。0.js,微信浏览器会识别JS调用。

补充说明,只有微信5.0及以上版本才支持支付功能,所以5.0之前的用户无法使用微信支付。但是你可以在用户代理中检查版本,它应该是这样的:Mozilla/5.0(iphone;CPU iphone OS 5_1_1 like Mac OS X) AppleWebKit/534.46(KHTML,like Gecko) Mobile/9B206 MicroMessenger/5.0

微信支付有4种交易类型:

  1. JSAPI - 微信内嵌浏览器使用
  2. 原生 - 生成二维码,用户必须使用内置微信应用的浏览器扫描二维码
  3. MWEB - 注意:用于手机或平板系统浏览器,但会调用微信App完成支付流程。
  4. APP - 在APP中使用,不是你的情况

因此,我认为 MWEB 是您所需要的并且最适合您的场景。

但是,如果你的平板或手机phone没有安装微信APP,你必须恢复到NATIVE(二维码)方式,所以用户必须拿出手机phone已安装微信APP扫描二维码完成支付