手机 云服务器 微信官方支付服务器
(小程序云客户端) (云函数) 微信支付服务器
1.按约定规则组合参数,向https://api.mch.weixin.qq.com/pay/unifiedorder发起调用,拿回prepay_id参数。
2.用拿回的参数prepay_id再次组合,发起支付请求。
1,小程序appid
2,云开发环境id
3,微信商户号
4,商户密匙
微信小程序微信支付官方流程图链接我简化的流程
step 1:设计按钮
<!--miniprogram/pages/to-pay-order/index.wxml-->
<view class="container">
<button bindtap='pay'>buy</button>
</view>
step 2:绑定事件
// miniprogram/pages/to-pay-order/index.js
Page({
/**
* 页面的初始数据
*/
data: {
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
},
pay: function () {
}
})
step 3:客户端调用框架
选用Promise 风格调用
https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-client-api/functions/callFunction.html
wx.cloud.callFunction({
// 要调用的云函数名称
name: 'add',
// 传递给云函数的event参数
data: {
x: 1,
y: 2,
}
}).then(res => {
// output: res.result === 3
}).catch(err => {
// handle error
})
pay: function () {
wx.cloud.callFunction({
// 要调用的云函数名称
name: 'payment',
// 传递给云函数的event参数
data: {
x: 1,
y: 2,
}
}).then(res => {
console.log('调用云支付函数OK:'+res)
}).catch(err => {
console.log('调用云支付函数fail: ' + err.errMsg)
})
}
step 4:新建云函数pay
// 云函数微信入口文件
//come from:https://github.com/Voyzz/Fruit-store-mp/blob/master/cloudfunctions/pay/index.js
const cloud = require('wx-server-sdk')
const request = require('request')
cloud.init()
// 云函数入口函数
// 获取prepay_id
exports.main = async (event, context) => {
let result = await getPrepayIdPromise(event);
return result
}
const getPrepayIdPromise = function (event) {
return new Promise((resolve, reject) => {
let options = {
"url": 'https://api.mch.weixin.qq.com/pay/unifiedorder',
"method": "POST",
"headers": {
"Content-Type": "text/xml",
"charset": "utf-8"
},
"form": event.xmlData
};
request.post(options, (err, result, body) => {
resolve({
err: err,
body: body
})
})
})
}
return new Promise(function (resolve, reject) {
let options = {
url: "https://api.mch.weixin.qq.com/pay/unifiedorder",
timeout: 1000,
body: formData,
};
// console.log('reqXml', reqXml);
request.post(options, function (error, response, body) {
if (error) {
console.log("=======================支付云函数连接微信官方支付服务器失败:" + error + "=====================");
reject(error);
} else {
console.log('支付云函数调用微信官方支付服务器返回的信息: ', body);
resolve(body);
}
});
});
<xml>
<appid>wx2421b1c4370ec43b</appid>
<attach>支付测试</attach>
<body>JSAPI支付测试</body>
<mch_id>10000100</mch_id>
<detail><![CDATA[{ "goods_detail":[ { "goods_id":"iphone6s_16G", "wxpay_goods_id":"1001", "goods_name":"iPhone6s 16G", "quantity":1, "price":528800, "goods_category":"123456", "body":"苹果手机" }, { "goods_id":"iphone6s_32G", "wxpay_goods_id":"1002", "goods_name":"iPhone6s 32G", "quantity":1, "price":608800, "goods_category":"123789", "body":"苹果手机" } ] }]]></detail>
<nonce_str>1add1a30ac87aa2db72f57a2375d8fec</nonce_str>
<notify_url>http://wxpay.wxutil.com/pub_v2/pay/notify.v2.php</notify_url>
<openid>oUpF8uMuAJO_M2pxb1Q9zNjWeS6o</openid>
<out_trade_no>1415659990</out_trade_no>
<spbill_create_ip>14.23.150.211</spbill_create_ip>
<total_fee>1</total_fee>
<trade_type>JSAPI</trade_type>
<sign>0CB01533B8C1EF103065174F50BCA001</sign>
</xml>
返回结果
"<xml><return_code><![CDATA[SUCCESS]]></return_code>\n<return_msg><![CDATA[OK]]></return_msg>\n<appid><![CDATA[wx9b00e80b6****]]></appid>\n<mch_id><![CDATA[15*****]]></mch_id>\n<nonce_str><![CDATA[5a7I0LWiPaAa1QJZ]]></nonce_str>\n<sign><![CDATA[7419DD696686A2ADD5B466D4FCDF6219]]></sign>\n<result_code><![CDATA[SUCCESS]]></result_code>\n<prepay_id><![CDATA[wx10212206059271b7365263ce1864643600]]></prepay_id>\n<trade_type><![CDATA[JSAPI]]></trade_type>\n</xml>"
客户端:
签名步骤:
#1.对参数按照key=value的格式,并按照参数名ASCII字典序排序生成字符串:
appId=***&nonceStr=xko42en9z3i&package=prepay_id=wx040102530328974f881b611299800100&signType=MD5&timeStamp=1575392572
#2.连接商户key:
appId=***&nonceStr=xko42en9z3i&package=prepay_id=wx040102530328974f881b611299800100&signType=MD5&timeStamp=1575392572&key=833843333354ddde
#3.生成sign并转成大写:
var paySign = md5.md5(paySignTemp).toUpperCase()
paySign=06891AB4D4AA3713A13D1C2BE03B98FB
注意:
在第一次签名时是小写“appid” 二次前面是驼峰大写“appId”
微信支付接口签名校验工具
https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=20_1
微信小程序通过云函数进行微信支付
https://blog.csdn.net/gf771115/article/details/100917779
真机测试已通过未用第三方支付的代码
https://developers.weixin.qq.com/community/develop/doc/000620ec5acb482103b7bf41d51804
水果小程序
https://github.com/Voyzz/Fruit-store-mp/blob/master/cloudfunctions/pay/index.js
小程序云开发使用第三方库pay实现小程序支付功能(含源码)
https://developers.weixin.qq.com/community/develop/article/doc/000ceae09288489c0e9886e6c59c13
小程序云开发使用第三方库wx-js-utils实现小程序支付功能(含源码)
https://blog.csdn.net/weixin_34268310/article/details/91422026
小程序云开发使用第三方库wx.BaaS.pay实现小程序支付功能(含源码)
https://blog.csdn.net/chuizigun7053/article/details/100894595
小程序云开发使用第三方库tenpay实现小程序支付功能(含源码)
https://blog.csdn.net/qiushi_1990/article/details/99347580
个人微信小程序怎么实现支付功能
1.支付需要营业执照,弄个个体户执照
2.赞赏码 + 用户 ID + 人工到账审核
3.用小程序的内部通知
4.充值可以引导用户进公众号充值,然后公众号里面跳转到自己网站。
但是按目前微信的规定公众号个人也是不允许接入微信支付的,
所以你还需要接入个人第三方支付(费率很高),或者整个商家付款链接然后手动录入支付信息
5.给用户一个财务的二维码,发红包之后去后台修改状态即可