PHP中的微信支付方式
Weixin Payment Method in PHP
我正在 PHP 开发中文电子商务网站。
并且我已经完成了微信支付的二维码生成url。它在 PC 上运行正常。
现在如果是平板电脑或手机网站版本,如何从网页打开微信应用程序并将二维码数据发送到微信应用程序。
这是微信的一大痛点。如果用户已经在微信浏览器中,您可以指示他们长按二维码,他们将看到一个弹出窗口,其中包含扫描图像中二维码的选项。
如果他们在另一个移动浏览器中,您几乎无法告诉他们截屏,然后从微信中扫描图像。
每次你生成URL你放在二维码里面你创建一个微信订单调用微信支付提供的unifiedorder
Url,对吧?使用 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;
}
});
}
parameters
是unifiedorder
微信支付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种交易类型:
- JSAPI - 微信内嵌浏览器使用
- 原生 - 生成二维码,用户必须使用内置微信应用的浏览器扫描二维码
- MWEB - 注意:用于手机或平板系统浏览器,但会调用微信App完成支付流程。
- APP - 在APP中使用,不是你的情况
因此,我认为 MWEB 是您所需要的并且最适合您的场景。
但是,如果你的平板或手机phone没有安装微信APP,你必须恢复到NATIVE(二维码)方式,所以用户必须拿出手机phone已安装微信APP扫描二维码完成支付
我正在 PHP 开发中文电子商务网站。 并且我已经完成了微信支付的二维码生成url。它在 PC 上运行正常。
现在如果是平板电脑或手机网站版本,如何从网页打开微信应用程序并将二维码数据发送到微信应用程序。
这是微信的一大痛点。如果用户已经在微信浏览器中,您可以指示他们长按二维码,他们将看到一个弹出窗口,其中包含扫描图像中二维码的选项。
如果他们在另一个移动浏览器中,您几乎无法告诉他们截屏,然后从微信中扫描图像。
每次你生成URL你放在二维码里面你创建一个微信订单调用微信支付提供的unifiedorder
Url,对吧?使用 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;
}
});
}
parameters
是unifiedorder
微信支付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种交易类型:
- JSAPI - 微信内嵌浏览器使用
- 原生 - 生成二维码,用户必须使用内置微信应用的浏览器扫描二维码
- MWEB - 注意:用于手机或平板系统浏览器,但会调用微信App完成支付流程。
- APP - 在APP中使用,不是你的情况
因此,我认为 MWEB 是您所需要的并且最适合您的场景。
但是,如果你的平板或手机phone没有安装微信APP,你必须恢复到NATIVE(二维码)方式,所以用户必须拿出手机phone已安装微信APP扫描二维码完成支付