DESTOON微信端在线支付主动唤起微信支付
  • 分类:经验分享
  • 发表:2018-01-12
  • 围观(8,389)
  • 评论(0)

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

Top