Mrcdh技术博客 Mrcdh技术博客
首页
  • Html5
  • Javascript
  • Nodejs
  • electron
  • Android
  • 微信公众号
  • 框架
  • 其他
  • Mysql
  • PHP
  • Python
  • java
  • Gulp
  • 其它
  • 网站
  • 资源
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Mrcdh

全栈开发小学生
首页
  • Html5
  • Javascript
  • Nodejs
  • electron
  • Android
  • 微信公众号
  • 框架
  • 其他
  • Mysql
  • PHP
  • Python
  • java
  • Gulp
  • 其它
  • 网站
  • 资源
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • uniapp常用封装

    • uniapp下sqlite简易封装
    • uniapp自定义Tabber让中间凸起
  • 使用plus.io创建文件并写入内容
  • uniapp-H5端使用vue-clipboard2复制内容至剪切板
  • uniapp使用vue3 setup
  • uniapp选择图片并转为base64格式
  • uniapp接入微信公众号支付
  • uniapp引入iconfont字体图标
  • 使用uts的方式调用光感器
  • uniapp常见问题
  • 《Uniapp》
mrcdh
2020-10-23

uniapp接入微信公众号支付

首先判断环境跳转获取code

// h5环境且在微信浏览器中
// #ifdef H5
if (this.utils.isWechat()) {
  let appid = this.utils.getAppid();
  // 这里是获取code后要跳转的地址,可以自定义也可以使用当前地址,使用当前页面地址需要自行判断处理code
  let local = window.location.href;
  window.location.href =  `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${encodeURIComponent(local)}&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect`;
  return;
}
// #endif
1
2
3
4
5
6
7
8
9
10

this.utils 是已经挂载的全局变量,utils.js 关键代码

const utils = {}
// 判断是否为公众号模拟器环境
utils.isWechat = () => {
  return String(navigator.userAgent.toLowerCase().match(/MicroMessenger/i)) === "micromessenger";
}
utils.getAppid = () => {
  return '你的appid';
}
export default utils
1
2
3
4
5
6
7
8
9

新建 wxPay.js

/*
  微信支付方法(uni-app h5)适用
  获取微信加签信息
  @param{data}:获取的微信加签
  @param{res}:成功回调
  @param{fail}:失败回调
    
  @warn:因为package为严格模式下的保留字,不能用作变量.
  @use
    wxPay({
      appId,
      timeStamp,
      nonceStr,
      signature,
      package,
      paySign
    },res=>{
      console.log('调用成功!');
    },fail=>{
      console.log('调用失败!');
    })
*/
const wx = require('jweixin-module');
const wxPay = (data, callback, errCallback) => {
 
  const {appId, timestamp, nonceStr, signature, packages, paySign} = data;

  wx.config({
    debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
    appId,      // 必填,公众号的唯一标识
    timestamp,  // 必填,生成签名的时间戳
    nonceStr,   // 必填,生成签名的随机串
    signature,  // 必填,签名,见附录1
    jsApiList: ['chooseWXPay'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
  });

  wx.ready(function() {
    wx.chooseWXPay({
      timestamp, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
      nonceStr, // 支付签名随机串,不长于 32 位
      'package': packages, // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=***)
      signType: 'MD5', // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'
      paySign, // 支付签名
      success(res) {
        // 支付成功后的回调函数
        callback(res);
      },
      fail(res) {
        errCallback(res);
      }
    });
  });

  wx.error(function(res) {
    // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
    /*alert("config信息验证失败");*/
  });
}
 
export default wxPay;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60

在点击支付的时候获取支付信息,触发公众号支付

// #ifdef H5
$this.$http.getPay({
  code: code,
  ......
}, res => {
  if(typeof res.data == 'string'){
    res.data = JSON.parse(res.data)
  }
  // 调起支付
  // 因为获取code跳转的地址栏会发生变化,所以这里指定地址进行跳转
  wxPay(res.data, s => {
    window.location.href = `/h5/#/pages/order/index`
  }, e => {
    window.location.href = `/h5/#/pages/shop/cashier?order_sn=${order_sn}`
  })
});
// #endif
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#uniapp#微信支付
上次更新: 2023/09/22, 16:54:32
uniapp选择图片并转为base64格式
uniapp引入iconfont字体图标

← uniapp选择图片并转为base64格式 uniapp引入iconfont字体图标→

最近更新
01
uniapp常见问题
03-19
02
Vue3项目搭建
12-25
03
使用pnpm的monorepo组织项目
11-01
更多文章>
Theme by Vdoing | Copyright © 2020-2025 Mrcdh | 苏ICP备2020058908号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×