uniapp 公众号支付(hash)

uniapp 公众号支付(hash模式)

  1. 根据Uniapp官网,集成jweixin-module
npm install jweixin-module --save
  1. 需要在微信公众平台,设置-公众号设置-功能设置-网页授权域名,配置自己的H5域名,作用网页授权获取openId(支付签名需要用到,此处是后台需要做的功能),同时,因为公众号和微信商户号是两个账号,所以需要绑定到微信商户账号上。
  2. 微信商户平台 绑定支付授权目录,直接用顶级域名即可,不用详细的
    在这里插入图片描述

4.下订单、通过订单获取后台生成的签名、时间戳之类的数据,这些需要后台在微信官网参考
5. 获取签名之后,就是前端的工作了,在需要支付的页面的script里引入第一步的库
js-sdk参考文档

 	[微信支付开发文档](https://pay.weixin.qq.com/wiki/doc/api/index.html)
var jweixin = require('jweixin-module');
  1. 调用方法里依次实现config方法、ready方法,包含checkJsApi方法、chooseWXPay方法,把相应参数传进去就可以了。如下所示:
weChatPayment(obj) {
	if (location.href.indexOf("?#") < 0) {
		 location.href = location.href.replace("#", "?#");
		 this.weChatPayment(obj)
	}		
	let _self = this;
	miniPay(obj).then(res => {
		let { appId,nonceStr, paySign,signType, timeStamp } = res.returnMsg.prepay;
		let packageName = res.returnMsg.prepay.package;
				
		jweixin.config({
			debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
			appId: appId, // 必填,公众号的唯一标识
			timestamp: timeStamp.toString(), // 必填,生成签名的时间戳
			nonceStr: nonceStr, // 必填,生成签名的随机串
			signature: paySign, // 必填,签名
			jsApiList: ['chooseWXPay'] // 必填,需要使用的JS接口列表
		})
		// 方法一开始:	我现在使用的第一种
	   WeixinJSBridge.invoke(
	      'getBrandWCPayRequest', {
	         "appId":appId,     //公众号名称,由商户传入     
	         "timeStamp":timeStamp,         //时间戳,自1970年以来的秒数     
	         "nonceStr":nonceStr, //随机串     
	         "package":packageName,     
	         "signType":signType,         //微信签名方式:     
	         "paySign":paySign //微信签名 
	      },
	     (res) =>{
	      if(res.err_msg == "get_brand_wcpay_request:ok" ){
			  this.payMaskHide = true; // 隐藏当前支付方式选择
			  uni.showToast({
			  	title: '支付成功!',
			  	duration: 2000,
			  	mask: true
			  });	      
	      } else{
			  uni.showToast({
			  	title: '支付失败!',
			  	icon: 'none'
			  });
		  }
	   }); 
	
		return false;
		// 方法一结束:	我现在使用的第一种
		
		// 方法二开始:第二种方式我没有测试,这里只是将第二种方式贴出来
		jweixin.ready((result) => {
			jweixin.checkJsApi({
				jsApiList: ['chooseWXPay'], // 需要检测的JS接口列表,所有JS接口列表见附录2,
				success: function(res) {
					console.log('checkjsapi Success')
					console.log(res);
				},
				fail:function(res) {
					console.log('res')
					console.log(res);
				}
			});
			jweixin.chooseWXPay({
			  debug: true,
			  appId: appId,
			  timestamp: timeStamp, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
			  nonceStr: nonceStr, // 支付签名随机串,不长于 32 位
			  package: packageName, // 统一支付接口返回的prepay_id参数值
			  signType: signType, // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'
			  paySign: paySign, // 支付签名
			  success: function (res) {
				// 支付成功后的回调函数
				console.log(res)
			  },
			  fail: function(err) {
				  console.log(err)
				  alert('支付失败', JSON.stringify(err))
			  }
			});
		})
		
	})
	return false;
	// 方法二结束:第二种方式我没有测试,这里只是将第二种方式贴出来
},

注意:如提示当前页面未注册,参考第三步

在这里插入图片描述

如还是不能正常支付,则将下面代码放入 weChatPayment方法中,或者放在onload中,根据自己的实际情况决定,

if (location.href.indexOf("?#") < 0) {
	location.href = location.href.replace("#", "?#");
	 this.weChatPayment(obj)
}	

支付成功
在这里插入图片描述

注意:前面我们进页面(onload 或者 在weChatPayment 方法中)我们将location.href中的 # 改成了?#,这时页面中的地址(之前#后面的路由)被当做了参数,当我们在离开页面的时候将他的地址改回来

if (location.href.indexOf("?#") > 0) {
	location.href = location.href.replace("?#", "#");
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值