小程序通过小程序云实现微信支付功能需要以下几个步骤:
-
注册并开通微信支付功能
首先需要在微信支付开放平台注册账号,并按照微信支付文档的要求,完成商户信息的填写和资质证明的上传。然后开通微信支付功能,获取到商户ID(即mch_id)和API密钥(即api_key)等重要参数,这些参数后续会在小程序中用到。 -
在小程序中配置支付接口
接下来需要在小程序管理后台中,进入“小程序云开发”界面,创建一个云函数,可以使用相应的脚手架工具——miniprogram-ci来初始化一个云函数的模板。然后修改index.js文件,编写支付接口的代码,并将商户ID和API密钥等参数填入其中。接着将支付接口通过云函数部署到小程序云端上,并在小程序的后台设置支付域名和支付证书。最后在小程序中使用wx.cloud.callFunction()方法调用云函数,实现支付功能。
以下是用JS示例代码实现支付接口部分:
const cloud = require('wx-server-sdk')
var request = require('request')
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV
})
exports.main = async (event, context) => {
try {
var openid = event.userInfo.openId
var total_fee = event.total_fee
var body = event.body
var spbill_create_ip = event.spbill_create_ip
var nonce_str = Math.random().toString(36).substr(2, 15)
var out_trade_no = Date.now().toString(36) + Math.random().toString(36).substr(3, 9)
var notify_url = 'http://www.example.com/wxpay/notify'
var mch_id = 'XXXXXXX'
var partner_key = 'xxxxxxxxxxxxxxxxxxxxxx'
//生成签名
var signA = 'appid=wxXXXXXXXXXXXXXXXX&body=' + body + '&mch_id=' + mch_id + '&nonce_str=' + nonce_str + '¬ify_url=' + notify_url + '&openid=' + openid + '&out_trade_no=' + out_trade_no + '&spbill_create_ip=' + spbill_create_ip + '&total_fee=' + total_fee + '&trade_type=JSAPI'
var signB = signA + '&key=' + partner_key
var md5 = require('md5')
var sign = md5(signB).toUpperCase()
//生成XML
var dataXml = '<xml><appid>wxXXXXXXXXXXXXXXXX</appid><body>' + body + '</body><mch_id>' + mch_id + '</mch_id><nonce_str>' + nonce_str + '</nonce_str><notify_url>' + notify_url + '</notify_url><openid>' + openid + '</openid><out_trade_no>' + out_trade_no + '</out_trade_no><spbill_create_ip>' + spbill_create_ip + '</spbill_create_ip><total_fee>' + total_fee + '</total_fee><trade_type>JSAPI</trade_type><sign>' + sign + '</sign></xml>'
//发送请求
var options = {
url: 'https://api.mch.weixin.qq.com/pay/unifiedorder',
method: 'POST',
headers: {
'Content-Type': 'text/xml'
},
body: dataXml
}
return new Promise((resolve, reject) => {
request(options, function (error, response, body) {
if (!error && response.statusCode == 200) {
var prepay_id = /<prepay_id><\!\[CDATA\[(.*)\]\]><\/prepay_id>/.exec(body)[1]
var data = {
'appId': 'wxXXXXXXXXXXXXXXXX',
'timeStamp': parseInt(Date.now() / 1000).toString(),
'nonceStr': Math.random().toString(36).substr(2, 15),
'package': 'prepay_id=' + prepay_id,
'signType': 'MD5'
}
var signA = 'appId=' + data['appId'] + '&nonceStr=' + data['nonceStr'] + '&package=' + data['package'] + '&signType=' + data['signType'] + '&timeStamp=' + data['timeStamp']
var signB = signA + '&key=' + partner_key
var paySign = md5(signB).toUpperCase()
data['paySign'] = paySign
resolve(data)
} else {
reject(error)
}
})
})
} catch (error) {
console.log(error)
return error
}
}
- 在小程序中实现支付功能
在小程序前端页面中,提供一个显示支付金额的按钮,当用户点击按钮时,调取支付接口获取到预支付订单信息(包括prepay_id、appId、timestamp、nonceStr、package和paySign),然后通过wx.requestPayment()方法将用户引导到微信支付中完成支付流程。
以下是用JS示例代码实现在前端页面上实现支付功能部分:
//在小程序前端页面中,定义以下按钮和方法
<view class="qf-wxPay" bindtap="wxPay">立即支付</view>
data: {
orderList: [], // 存放用户订单信息的数组
currentOrder: {} // 存放当前待支付订单的对象
},
wxPay: function(e) {
var orderID = this.data.currentOrder.id
var total_fee = this.data.currentOrder.price
var body = '商品名'
var spbill_create_ip = '127.0.0.1'
wx.cloud.callFunction({
name: 'pay',
data: {
body: body,
total_fee: total_fee,
spbill_create_ip: spbill_create_ip
},
success: res => {
var payment = res.result
wx.requestPayment({
'timeStamp': payment.timeStamp,
'nonceStr': payment.nonceStr,
'package': payment.package,
'signType': 'MD5',
'paySign': payment.paySign,
'success': function (res) {
// 支付成功后执行的操作
},
'fail': function (res) {
// 支付失败后执行的操作
},
'complete': function (res) {}
})
},
fail: console.error
})
}
这样就实现了小程序通过小程序云实现微信支付功能的完整攻略。其中的示例代码可供参考实际项目。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:小程序通过小程序云实现微信支付功能实例 - Python技术站