Destoon的微信端支付走的还是二维码扫码支付,流程是“用户下单->生成支付二维码->手机端扫码或识别图中二维码支付”,这样操作很麻烦,而且一般情况下会弹出“未开通扫码支付”。
现在要更改为:“用户下单->主动唤起微信支付->支付成功”
修改方法:
1、打开\api\pay\weixin\qrcode.php文件。
在$charge = $r['amount'] + $r['fee'];之上前接增
$pay_type_su = 'qrocde'; $t = $db->get_one("SELECT openid FROM {$DT_PRE}weixin_user WHERE username='$_username'");
在$post['product_id'] = $itemid;下新增
if ($DT_MOB['browser'] == 'weixin'){ $post['openid'] = $t['openid']; $post['trade_type'] = 'JSAPI'; }else{ $post['trade_type'] = 'NATIVE'; }
在
$x = simplexml_load_string($rec, 'SimpleXMLElement', LIBXML_NOCDATA); }
下新增
else { if(strpos($rec, 'return_msg') !== false) { $pay_type_su = 'jsapi'; $x = simplexml_load_string($rec, 'SimpleXMLElement', LIBXML_NOCDATA); $p_post = array(); $p_post['appId'] = $PAY[$bank]['appid']; $p_post['timeStamp'] = time(); $p_post['nonceStr'] = random(32); $p_post['package'] = 'prepay_id='.$x->prepay_id; $p_post['signType'] = 'MD5'; $p_post['paySign'] = make_sign($p_post, $PAY[$bank]['keycode']); $t_post = json_encode($p_post);//echo $t_post;die; //dalert(convert($x->return_msg, 'UTF-8', DT_CHARSET), $MODULE[2]['linkurl'].'charge.php?action=record'); }
在
?> <html> <head>
之上新增
if ($pay_type_su == 'qrocde'){
代码
在
</body> </html>
之下新增
<?php }elseif ($pay_type_su == 'jsapi'){ ?> <script type="text/javascript"> function onBridgeReady(){ WeixinJSBridge.invoke('getBrandWCPayRequest', <?php echo $t_post;?>, function(res){ if(res.err_msg == "get_brand_wcpay_request:ok" ) { window.location.href = '<?php echo $MODULE[2]['linkurl'];?>charge.php'; }else if(res.err_msg == "get_brand_wcpay_request:fail" ){ alert("支付失败");//alert(JSON.stringify(res)); }else{ alert("用户已取消");//alert(JSON.stringify(res)); } } ); } if (typeof WeixinJSBridge == "undefined"){ if( document.addEventListener ){ document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false); }else if (document.attachEvent){ document.attachEvent('WeixinJSBridgeReady', onBridgeReady); document.attachEvent('onWeixinJSBridgeReady', onBridgeReady); } }else{ onBridgeReady(); } </script> <?php } ?>
代码
到此完成。
这里会有一个问题。就是如果用户未绑定微信号,或是使用Open.weixin.qq.com开放平台帐号登陆时,会出错,因为JSAPI必须提交用户的openid。这就需要在系统里提前提醒用户绑定微信了。我的方法是在/mobile/index.asp里检测用户是否绑定,未绑定则提醒用户,并跳转到绑定页面。代码如下:
if(!empty($_username) && empty($wx_openid)){ dalert('您还未绑定帐号,请先绑定您的微信号!', $MODULE[2]['linkurl'].'weixin.php'); }
至此,结束。
注意:我是在20151222版本基础上修改的。新版这个文件变化不大。