浅谈微信公众号开发之微信支付的坑

 在做微信公众号开发的时候,会遇到一些支付,特别是微信支付,参考了官网的一些代码,写的

特别注意的是配置安全域名的时候一定要在公众号后台配置好,不然无论怎么写都是域名无效,

还有就是容易的报的签名无效这些

 /**
	 * 获取支付签名
	 * 
	 * */
	function getPayAutograph(sendJson,payType,orderId,jwt,dpsBillingId){
		//获取用户地址列表地址
		var jwt = common.getCookie('jwtToken');
		common.initToast(orderSubmitData.languageData.takeOut.user_paying);
		service.getPayTypeAutograph(payType,orderId,dpsBillingId,jwt).then(function(res){			
			var result = JSON.parse(res);		
			if (result.code == '200') {
				switch(payType){
					case 'P_WECHAT': //微信
						weiXinPay(result.data,orderId);break;
					case 'P_ALIPAY': //支付宝
						aliPay(result.data.payInfo);break;						
					case 'P_DPS': //纽币支付
						dpsPay(result.data.redirectUrl);break;
					default:
						return common.createDialog(orderSubmitData.languageData.failed);
				}
			}else if(result.code == '401'){
					weui.confirm(result.msg, {
					    buttons: [{
					        label: orderSubmitData.languageData.yes,
					        type: 'primary',
					        onClick: function(){
					        	window.location.href = '../../pages/index.html';
					        }
					    }]
					});
			}else{
				common.createDialog(result.msg);
			}
		});
	}
	  

	/**
	 * 微信支付
	 * @param payInfo{String} 支付签名
	 * @param orderId {Number} 订单ID
	 * */
	function weiXinPay(payInfo,orderId){
		if(!payInfo){
			return false;
		}
		
		var appId = payInfo.appid;
		var timeStamp = payInfo.timestamp;
		var nonceStr = payInfo.noncestr;
		var _package = payInfo.package;
		var prepayid = payInfo.prepayid;
		var paySign = payInfo.sign;
			//支付请求数据配置
		var weiXinPay = {
				"appId":appId,     //公众号名称,由商户传入     
           		"timeStamp":timeStamp,         //时间戳,自1970年以来的秒数     
           		"nonceStr":nonceStr, //随机串     
       			"package":'prepay_id='+prepayid,     
           		"signType":"MD5",         //微信签名方式:     
           		"paySign":paySign, //微信签名 ,
			};
		callPay(weiXinPay,orderId);
	}
	
	/**
	 * 唤起支付控件
	 * @param weiXinPay {JSON} 请求数据
	 * @param orderId {Number} 订单ID
	 * */
	function callPay(weiXinPay,orderId){
		if (typeof WeixinJSBridge == "undefined"){
				common.createDialog('WeixinJSBridge undefined');
		   if( document.addEventListener ){
		       	document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
		   }else if (document.attachEvent){
		       	document.attachEvent('WeixinJSBridgeReady', onBridgeReady); 
		       	document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
		   }
		}else{
		   onBridgeReady(weiXinPay,orderId);
		}
	}
	
	/**
	 * 支付控件
	 * @param weiXinPay {JSON} 请求数据
	 * @param orderId {Number} 订单ID
	 * */
	function onBridgeReady(weiXinPay,orderId){
	    //上面接口已经获取接口需要的数据,
	   WeixinJSBridge.invoke(
	       'getBrandWCPayRequest',weiXinPay, function(res){
	            if(res.err_msg == "get_brand_wcpay_request:ok" ) {
	            	//支付成功
	            	weui.confirm(orderSubmitData.languageData.takeOut.pay_success, {
					    buttons: [{
					        label: orderSubmitData.languageData.yes,
					        type: 'primary',
					        onClick: function(){
					        	var shopId = common.getRegExp('shopId');
					        	//支付成功跳转到订单详情页
								window.location.href = './takeout_order_detail.html#shopId=' + shopId + '&orderId='+orderId+'&from=list';
					        }
					    }]
					});
	            } else if(res.err_msg == "get_brand_wcpay_request:cancel") {
	            	//支付取消
	            	common.createDialog(orderSubmitData.languageData.takeOut.pay_cancel);
	            } else if(res.err_msg == "get_brand_wcpay_request:fail") {
	            	//支付失败
	            	common.createDialog(orderSubmitData.languageData.takeOut.pay_failed);
	            }
	        }
	    );
	}	

参考:http://hao2013.cn/?id=35

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

狼丶宇先森

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值