微信小程序支付过程详解,基于node.js的后台
2017-08-11 18:22
1351 查看
最近的一个月一直在研究小程序,其中的支付过程一直困扰了我很久,看过大神的帖子之后,按照大神的步骤一步步操作,终于解决。以下详细分析微信小程序的支付过程。
首先附上大神的帖子:http://blog.csdn.net/zhuming3834/article/details/73168056
需要注意的是,一个小程序会对应一个appid,这个appid是不会变的,同时还会有一个appSecret,这个密钥在你第一次查看时显示一次,没记错的话应该是需要管理员进行扫码,这时你需要将这个密钥记录下来,如果你忘记了这个密钥,可以通过页面上的重置获取,但之前的密钥就失效了。
需要注意的是:Mch_Key需要配置32位的随机数,自己设定的(建议使用Md5值)
以下是小程序端的代码(将上述的三个值传到后台处理)
首先附上大神的帖子:http://blog.csdn.net/zhuming3834/article/details/73168056
一、发起微信支付之前首先要有的四个参数
globalData: { appid: 'wxcd3**************d149d',//appid需自己提供,此处的appid我随机编写 secret: '3dc5f7b************6eb45bb',//secret需自己提供,此处的secret我随机编写 Mch_id: "148*******22", // 商户号 Mch_key: "jJn0haD**************qZ7Bty1Z60e", // 商户key }接下来我会解释这四个参数的来源并将其放置在小程序的app.js文件中的全局变量中,就如同上图所示。当然,这些参数的具体数值不带*(哈哈哈)
①appid和secret的获取
登陆微信公众平台自己注册好的小程序账户,appid和appsecret会显示在如下位置需要注意的是,一个小程序会对应一个appid,这个appid是不会变的,同时还会有一个appSecret,这个密钥在你第一次查看时显示一次,没记错的话应该是需要管理员进行扫码,这时你需要将这个密钥记录下来,如果你忘记了这个密钥,可以通过页面上的重置获取,但之前的密钥就失效了。
②Mch_id和Mch_key的获取
每个需要支付的小程序都需要在微信商户平台注册商户号,获取Mch_id和Mch_key(注册的过程不太清楚,以下的截图是如何获取已知的商户的数据)Mch_id(商户号)
Mch_key(商户密钥)
需要注意的是:Mch_Key需要配置32位的随机数,自己设定的(建议使用Md5值)
二、获取微信使用者的openid
①、获取code码
wx.login({ success: function(res) { if (res.code) { //接下来的请求写在这里 } else { console.log('获取用户登录态失败!' + res.errMsg) } } });调用微信的API中的wx.login方法,在回调函数中获取code值。
②用上一步中获取到的code值和第一步中获取到的appId和secret换取openid
注:openid是微信用来标识唯一微信用户的以下是小程序端的代码(将上述的三个值传到后台处理)
wx.request({ url: config.service.payUrl, //发送 用户code 小程序appId app秘钥 data: { code: res.code, appid: app.globalData.appId, secret: app.globalData.appSecret, }, method: "POST", header: { "Content-Type": "application/x-www-form-urlencoded" }, success: function (res) { // 用户唯一id var openid = res.data.openid; console.log(res) console.log("this is openId:" + openid) } })以下是后台处理代码
function mainpay(req, response) { var url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + req.body.appid + "&secret=" + req.body.secret + "&code=" + req.body.code + "&grant_type=authorization_code"; https.get(url, function(resu) { //res.send(resu) var datas = []; var size = 0; resu.on('data', function(result) { response.send(result) }); }).on("error", function(err) { Logger.error(err.stack) callback.apply(null); }); }后台接受小程序端的请求,将传过来的appId,secret,code值拼接成一个固定格式的Url地址,并从后台向小程序的官方服务器发起请求,官方服务器处理请求后会将appid以JSON的形式返回
相关文章推荐
- 详解基于Node.js的微信JS-SDK后端接口实现代码
- NideShop:基于Node.js+MySQL开发的微信小程序商城开源啦
- 微信小程序完整精品demo:移动小商城:基于node,包含前后台
- 基于Node.js+MySQL开发的开源微信小程序B2C商城(页面高仿网易严选)
- CentOS 7.3 下部署基于 Node.js的微信小程序商城
- (开源)基于vue, react, node.js, go开发的微商城(含微信小程序)
- 【微信小程序】支付过程详解
- 微信小程序完整精品demo:移动小商城:基于node,包含前后台
- 【微信小程序】支付过程详解
- 基于Node.js+MySQL开发的开源微信小程序B2C商城(页面高仿网易严选)
- 通过新浪云部署NideShop微信小程序商城(基于Node.js+MySQL+ThinkJS)
- 微信小程序基于node.js的websocket服务器搭建和SSL证书申请、配置全家桶
- 基于Node.js+MySQL开发的开源微信小程序B2C商城(页面高仿网易严选)
- 使用ASP.NET的C#语言写后台如何将数据返回给微信小程序的JS
- 微信小程序开发教程(七)逻辑层——.js详解
- 微信小程序 WXML、WXSS 和JS介绍及详解
- 微信小程序 js详解
- Vue.js 运行环境搭建详解(基于windows的手把手安装教学)及vue、node基础知识普及
- node.js基于fs模块对系统文件及目录进行读写操作的方法详解
- 基于Node.js的微信跳一跳辅助工具