我正在通过PHP开发中文电子商务网站。 我已完成微信付费网址的二维码生成。它在PC上运行正常。
现在在平板电脑或移动网站版本的情况下,如何从网页打开微信应用程序并将QR码数据发送到微信应用程序。
答案 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;
}
});
}
parameters
是unifiedorder
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)
微信支付有四种类型的交易:
因此,我认为MWEB是您所需要的,也是您的最佳选择。