100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 实现微信小程序的支付功能代码解析

实现微信小程序的支付功能代码解析

时间:2021-10-19 23:52:54

相关推荐

实现微信小程序的支付功能代码解析

微信小程序|小程序开发

微信小程序,在线支付功能

微信小程序-小程序开发

最近需要在微信小程序中用到在线支付功能,于是看了一下官方的文档,发现要在小程序里实现微信支付还是很方便的,如果你以前开发过服务号下的微信支付,那么你会发现其实小程序里的微信支付和服务号里的开发过程如出一辙,下面我就具体说一下小程序里微信支付的开发流程和注意点。

精简版内核源码,vscode的js代码高亮,安装ubuntu张勇,tomcat访问数配置,爬虫python合集,php 字符串固定长度,谷歌独立站SEO什么意思,手机百度云网站源码lzw

股票网站源码php,vscode类库,ubuntu搭,tomcat配路径,sqlite插入一行,ecshop京东物流插件,哪个前端框架做自适应最好,网页爬虫以后怎么导出信息,hhvm php,中山seo推广方式,爱装网装修招标网站,带菜单网页,扁平化个人博客模板下载lzw

1.开通微信支付和微信商户号

这个过程就和开通服务号的微信支付过程一样,没有什么可以说的。

flash 俄罗斯方块 源码,vscode做个人简介,ubuntu网卡设置,tomcat 漏洞利用,sqlite锁,淄博网页设计招聘,数据库数据字典模板,虚拟服务器和端口转发,超强pdf在线预览插件 下载,face前端框架,人体爬虫,php bool,深圳关键词seo优化,springboot难学吗,站点标签是什么,网站常用素材,网页设计模板百度盘,阿里云后台管理模板,网站建设前台与后台最新技术,jquery显示页面最底部,jsp银行储蓄管理系统,程序启动页面lzw

2.获得用户的openid

首页我们需要在小程序的客户端js中获取当前用户的openid,通过调用wx.login方法可以得到用户的code,然后开发者服务器使用登录凭证 code 获取 openid。

wx.login({success: function(res) { if (res.code) {//发起网络请求wx.request({ url: https://yourwebsit/onLogin, method: POST, data: { code: res.code }, success: function(res) {var openid = res.data.openid; }, fail: function(err) {console.log(err) }}) } else {console.log(获取用户登录态失败! + res.errMsg) }} });

var code = req.param("code"); request({ url: "https://api./sns/jscode2session?appid="+appid+"&secret="+secret+"&js_code="+code+"&grant_type=authorization_code", method: GET }, function(err, response, body) { if (!err && response.statusCode == 200) {res.json(JSON.parse(body)); } });

3.获取prepay_id和支付签名验证paySign

这一步的过程就和服务号里的微信支付过程一样,分为客户端和服务器端

首先来看一下客户端js

在服务号里,我们是通过如下的代码来调起支付功能

function jsApiCall() { WeixinJSBridge.invoke(getBrandWCPayRequest,{ "appId":"",//公众号名称,由商户传入 "timeStamp":"", //时间戳,自1970年以来的秒数 "nonceStr":"", //随机串 "package":"prepay_id=", "signType":"MD5", //微信签名方式: "paySign":"" //微信签名},function(res){ WeixinJSBridge.log(res.err_msg); if( res.err_msg =="get_brand_wcpay_request:ok"){ alert("支付成功!"); }else{ alert("支付失败!"); }} ); }

在小程序里,我们是通过wx.requestPayment方法来调起支付功能,当然在这之前,我们先要获取prepay_id。

wx.request({ url: https://yourwebsit/service/getPay,method: POST, data: {bookingNo:bookingNo, /*订单号*/total_fee:total_fee, /*订单金额*/openid:openid }, header: { content-type: application/json }, success: function(res) { wx.requestPayment({ imeStamp:timeStamp, onceStr: nonceStr,package: prepay_id=+res.data.prepay_id,signType: MD5,paySign: res.data._paySignjs,success:function(res){ console.log(res);},fail:function(res){ console.log(fail:+JSON.stringify(res));} }) }, fail: function(err) { console.log(err) }})

那在服务器端主要要实现的是prepay_id的获取和签名paySign

var bookingNo = req.param("bookingNo"); var total_fee = req.param("total_fee"); var openid = req.param("openid"); var body = "费用说明"; var url = "https://api.mch./pay/unifiedorder"; var formData = ""; formData += "appid"; //appid formData += "test"; formData += "" + body + ""; formData += "mch_id"; //商户号 formData += "nonce_str"; formData += "notify_url"; formData += "" + openid + ""; formData += "" + bookingNo + ""; formData += "spbill_create_ip"; formData += "" + total_fee + ""; formData += "JSAPI"; formData += "" + paysignjsapi(appid, attach, body, mch_id, nonce_str, notify_url, openid, bookingNo, spbill_create_ip, total_fee, JSAPI) + ""; formData += ""; request({ url: url, method: POST, body: formData }, function(err, response, body) { if(!err && response.statusCode == 200) {var prepay_id = getXMLNodeValue(prepay_id, body.toString("utf-8"));var tmp = prepay_id.split([);var tmp1 = tmp[2].split(]);//签名var _paySignjs = paysignjs(appid, mch_id, prepay_id= + tmp1[0], MD5,timeStamp);var o = { prepay_id: tmp1[0], _paySignjs: _paySignjs}res.send(o); } });

下面是用到的函数

function paysignjs(appid, nonceStr, package, signType, timeStamp) { var ret = { appId: appid, nonceStr: nonceStr, package: package, signType: signType, timeStamp: timeStamp }; var string = raw1(ret); string = string + &key=+key; console.log(string); var crypto = require(crypto); return crypto.createHash(md5).update(string, utf8).digest(hex);};function raw1(args) { var keys = Object.keys(args); keys = keys.sort() var newArgs = {}; keys.forEach(function(key) { newArgs[key] = args[key]; }); var string = \; for(var k in newArgs) { string += & + k + = + newArgs[k]; } string = string.substr(1); return string;};function paysignjsapi(appid, attach, body, mch_id, nonce_str, notify_url, openid, out_trade_no, spbill_create_ip, total_fee, trade_type) { var ret = { appid: appid, attach: attach, body: body, mch_id: mch_id, nonce_str: nonce_str, notify_url: notify_url, openid: openid, out_trade_no: out_trade_no, spbill_create_ip: spbill_create_ip, total_fee: total_fee, trade_type: trade_type }; var string = raw(ret); string = string + &key=+key; var crypto = require(crypto); return crypto.createHash(md5).update(string, utf8).digest(hex);};function raw(args) { var keys = Object.keys(args); keys = keys.sort() var newArgs = {}; keys.forEach(function(key) { newArgs[key.toLowerCase()] = args[key]; }); var string = \; for(var k in newArgs) { string += & + k + = + newArgs[k]; } string = string.substr(1); return string;};function getXMLNodeValue(node_name, xml) { var tmp = xml.split(""); var _tmp = tmp[1].split(""); return _tmp[0];}

这样简单3步,小程序的微信支付功能就接上了,下面是测试的支付效果图

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。