微信h5公众号授权、调起微信支付

公众号授权:
微信文档:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html

// 判断是否已授权
onLoad() {
    let fsOpenid = uni.getStorageSync("fsOpenId");
    if (!fsOpenid) {
      //解析链接
      let pcode = this.getUrlParam("code");
      if (pcode) {
        // 已授权,获取openId
        this.getOpenId(pcode);
      } else {
        // 未授权,去授权获取 code
        this.getCode();
      }
    }
  },
  methods: {
    getCode() {
      let link = "授权之后跳转回来的链接";
      let APPID = "公众号appId";
      let href = encodeURIComponent(link);
      window.location.href = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${APPID}&redirect_uri=${href}&response_type=code&scope=snsapi_base&state=0#wechat_redirect`;
    },
    // 解析链接
    getUrlParam(name) {
      console.log("当前链接", window.location.href);
      let reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
      let url = window.location.href.split("#")[0];
      let search = url.split("?")[1];
      if (search) {
        let r = search.substr(0).match(reg);
        if (r !== null) {
          console.log("截取code", unescape(r[2]));
          return unescape(r[2]);
        }
        return null;
      } else {
        return null;
      }
    },
    // 获取openId
    getOpenId(code) {
      let params = { code: code };
      api.getOpenid(params, "post").then((res) => {
        console.log("openid", res.data);
        uni.setStorageSync("fsOpenId", res.data);
      });
    },
   }

在这里插入图片描述

js-sdk 调起支付:
引入sdk:
1 、在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.6.0.js
2、npm下载:npm i jweixin-module

//wechat.js页面
const wx = require('jweixin-module');
 
const wexinPay = function(data) {
	// appId timeStamp nonceStr package signType paySign
	wx.config({
		debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
		appId:data.appId, // 必填,公众号的唯一标识
		timestamp:data.timeStamp, // 必填,生成签名的时间戳
		nonceStr:data.nonceStr, // 必填,生成签名的随机串
		signature:data.signature, // 必填,签名,见附录1
		jsApiList: ['chooseWXPay'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
	});
 
	wx.ready(() => {
		wx.chooseWXPay({
			'timestamp':data.timeStamp+'', // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
			'nonceStr':data.nonceStr, // 支付签名随机串,不长于 32 位
			'package': data.package, // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=***)
			'signType': 'MD5', // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'
			'paySign':data.paySign, // 支付签名
			success: (res) => {
				if(res.errMsg==='chooseWXPay:ok'){
				}
				// 支付成功后跳转到显示页面
			},
			 // 不管支付成功与否,只要拉起支付之后进行任何操作之后,都会进入complate函数
			complete: (res)=> {
				if (res.errMsg === 'chooseWXPay:ok') {           
					// 成功 res.errMsg === 'chooseWXPay:ok' // 支付成功提示页面,点击完成按钮之后 
				} else if (res.errMsg === 'chooseWXPay:cancel') {   
					// 取消 res.errMsg === 'chooseWXPay:cancel'
					
				}
			},
			cancel:(res)=>{
				uni.showToast({
					title:'取消支付',
					icon:'none'
				});
			},
			fail: (res) => {
				uni.showToast({
					title:'支付失败',
					icon:'none'
				});
			}
		});
	});
	wx.error((res) => {
		// config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
		uni.showToast({
			title:'支付失败请联系管理员',
			icon:'none',
			mask:true
		})
	});
 
}
 
export default wexinPay;

jsApi 调起微信支付
文档:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6

function onBridgeReady(){
   WeixinJSBridge.invoke(
      'getBrandWCPayRequest', {
         "appId":"wx2421b1c4370ec43b",     //公众号ID,由商户传入     
         "timeStamp":"1395712654",         //时间戳,自1970年以来的秒数     
         "nonceStr":"e61463f8efa94090b1f366cccfbbb444", //随机串     
         "package":"prepay_id=u802345jgfjsdfgsdg888",     
         "signType":"MD5",         //微信签名方式:     
         "paySign":"70EA570631E4BB79628FBCA90534C63FF7FADD89" //微信签名 
      },
      function(res){
      if(res.err_msg == "get_brand_wcpay_request:ok" ){
      // 使用以上方式判断前端返回,微信团队郑重提示:
            //res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。
      } 
   }); 
}
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();
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值