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版本基础上修改的。新版这个文件变化不大。
