1. 简介
微信支付是一种非常方便的支付方式,可以实现线上和线下的支付。而在移动应用中,我们可以通过微信公众平台提供的开发接口去实现微信支付功能。而本文将介绍使用uniapp实现微信支付功能的步骤。
2. 接入微信支付
2.1 配置微信支付参数
接入微信支付需要在微信商户平台注册开发者账号,并在开发者中心中生成应用ID和密钥。
打开微信公众平台官方网站:https://open.weixin.qq.com/,使用微信账号进行注册或登录,然后点击左侧菜单栏中的“微信支付”进行开通。请注意:在开通微信支付之前,需要先申请企业实名认证。
在开通微信支付之后,需要配置微信支付参数。打开微信商户平台官方网站:https://pay.weixin.qq.com/,使用微信账号进行注册或登录.
在商户平台中点击“产品中心”-“开发配置”,然后在“支付配置”中填写相关信息。
/*
* 微信支付参数配置
* 注意:这里的参数均为示例参数,请使用在微信商户平台中生成的真实参数
*/
const wxpayConfig = {
appid: 'wxxxxxxxxxxxxxxxxx', // 小程序ID
mch_id: 'xxxxxxxxx', // 商户号
key: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', // API密钥
notify_url: 'https://www.example.com/wxpay/notify' // 支付结果通知地址
}
2.2 安装依赖
要使用uniapp实现微信支付功能,需要使用unified-payment插件。
在项目根目录中,打开终端并输入以下命令进行安装:
npm install unified-payment --save
在安装完成后,需要在main.js
文件中引入插件。
import Vue from 'vue'
import App from './App'
import unifiedPayment from 'unified-payment'
Vue.config.productionTip = false
Vue.use(unifiedPayment)
App.mpType = 'app'
const app = new Vue({
...App
})
app.$mount()
3. 实现微信支付
3.1 创建支付订单
在客户端中发送支付请求后,需要创建相应的支付订单。
在uniapp应用中,可使用uni.request
方法创建订单并返回prepay_id
。代码如下:
/**
* 创建微信支付订单
* @param {Object} data 订单信息
* @param {Function} success 支付成功回调
* @param {Function} fail 支付失败回调
*/
function createWeChatPayOrder(data, success, fail) {
uni.request({
url: 'https://api.mch.weixin.qq.com/pay/unifiedorder',
method: 'POST',
data: {
appid: wxpayConfig.appid,
mch_id: wxpayConfig.mch_id,
nonce_str: nonceStr(),
body: data.body, // 商品描述
out_trade_no: data.out_trade_no, // 商户订单号
total_fee: data.total_fee, // 总金额,单位为分
spbill_create_ip: data.spbill_create_ip, // 终端IP
notify_url: wxpayConfig.notify_url, // 通知地址
trade_type: 'JSAPI',
openid: getApp().globalData.openid
},
success(res) {
const { return_code, result_code, prepay_id } = parseResult(res.data)
if (result_code === 'SUCCESS' && return_code === 'SUCCESS') {
success(prepay_id)
} else {
fail(res.data)
}
},
fail(res) {
fail(res)
}
})
}
在上面的代码中,prepay_id
是后面获取支付信息需要用到的参数。
3.2 获取支付信息
在创建支付订单之后,需要获取支付信息,生成支付签名,并将接口返回的支付信息传递给微信客户端进行支付。
调用uni.requestPayment
方法可以打开微信客户端并传递支付信息。
/**
* 获取微信支付信息
* @param {String} prepay_id
* @param {Function} success
* @param {Function} fail
*/
function getWeChatPayInfo(prepay_id, success, fail) {
uni.request({
url: 'https://api.mch.weixin.qq.com/pay/orderquery',
method: 'POST',
data: {
appid: wxpayConfig.appid,
mch_id: wxpayConfig.mch_id,
nonce_str: nonceStr(),
out_trade_no: data.out_trade_no
},
success(res) {
const { return_code, result_code } = parseResult(res.data)
if (result_code === 'SUCCESS' && return_code === 'SUCCESS') {
const { nonce_str, prepay_id, sign } = parseResult(res.data)
const signData = {
appId: wxpayConfig.appid,
timeStamp: (Date.now() / 1000).toFixed(0),
nonceStr: nonce_str,
signType: 'MD5',
package: `prepay_id=${prepay_id}`
}
signData.paySign = createSign(signData)
success(signData)
} else {
fail(res.data)
}
},
fail(res) {
fail(res)
}
})
}
/**
* 创建支付签名
* @param {*} signData 支付信息
*/
function createSign(signData) {
let stringA = Object.keys(signData)
.filter(key => signData[key])
.sort()
.map(key => `${key}=${signData[key]}`)
.join('&')
stringA += `&key=${wxpayConfig.key}`
return md5(stringA).toUpperCase()
}
/**
* 解析微信返回结果
* @param {String} result 微信返回结果
*/
function parseResult(result) {
const data = {}
result.split('&').forEach(item => {
const [key, value] = item.split('=')
data[key] = value
})
return data
}
/**
* 生成随机字符串
*/
function nonceStr() {
const str = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);
return str.substr(0, 32)
}
4. 总结
本文介绍了在uniapp中实现微信支付功能的步骤,主要包括配置微信支付参数、安装依赖、创建支付订单和获取支付信息。使用这些步骤,我们可以轻松地在uniapp应用中集成微信支付功能。