PHP中的微信支付方式

时间:2016-02-20 16:31:41

标签: php weixinjsbridge

我正在通过PHP开发中文电子商务网站。 我已完成微信付费网址的二维码生成。它在PC上运行正常。

现在在平板电脑或移动网站版本的情况下,如何从网页打开微信应用程序并将QR码数据发送到微信应用程序。

3 个答案:

答案 0 :(得分:4)

每当您生成放入QRCode的网址时,您都会创建一个微信订单,呼叫WechatPay提供的unifiedorder网址,对吧?使用trade_type = NATIVE

您需要的是对该网址进行相同的调用,但使用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);

一旦你有了这个字符串,你在Wechat WebBrowser中显示的页面内你需要进行一次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 WechatPay API调用的格式化结果。 在用户使用可能的结果离开WechatPay网关后调用function(res)

我希望这对你有所帮助。

更新:

我意识到你不需要文件jweixin-1.0.0.js,微信Web浏览器它会识别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

答案 1 :(得分:0)

这是微信的一个主要难点。如果用户已经在微信浏览器中,您可以指示他们长按QR码,他们会弹出一个选项来扫描图像中的QR码。

如果他们在另一个移动浏览器中,你几乎不得不告诉他们拍摄屏幕截图,然后从微信内扫描图像。

答案 2 :(得分:0)

微信支付有四种类型的交易:

  1. JSAPI - 用于微信App嵌入式浏览器
  2. NATIVE - 生成QR码,用户必须使用微信App嵌入浏览器扫描QR
  3. MWEB - 注意:在移动或平板电脑系统浏览器中使用,但它会调用微信应用程序来完成付款流程。
  4. APP - 在APP中使用,而非您的情况
  5. 因此,我认为MWEB是您所需要的,也是您的最佳选择。