uniapp 是一种基于 vue.js 的跨平台开发框架,可以用于快速开发小程序、app 和 h5 等多个平台的应用程序。在 uniapp 中,我们可以通过集成微信支付来实现在线支付功能,让用户可以在应用中购买商品或服务。
本文将介绍如何使用 uniapp 实现微信支付功能,包括注册微信支付账号,配置支付参数,调用支付接口等步骤。
一、注册微信支付账号
要使用微信支付功能,我们必须先注册一个微信支付商户账号,如果已经有了微信公众号或小程序,可以直接将其升级为支付账号,否则需要前往微信支付官网注册。
注册完成后,需要提交相应的资料进行实名认证,认证通过后,即可登录进入商户平台,完成后续支付相关操作。
二、创建商户订单
在完成微信商户支付账号的注册之后,接下来需要在 uniapp 中创建订单,以便用户可以在线支付购买商品或服务。在创建订单时,需要注意以下几个参数:
- appId:微信开放平台分配的 AppID;
- timeStamp:时间戳,从1970年1月1日00:00:00至今的秒数;
- nonceStr:随机字符串,不长于32位;
- package:统一下单接口返回的 prepay_id 参数值,格式如下:prepay_id=*
- signType:签名算法,暂支持 MD5;
- paySign:签名,通常由后台生成。
在uniapp中,可以通过以下方式创建商户订单:
export default {
data() {
return {
appId: 'XXXXXXXXXXXXXX', // 微信开放平台分配的 AppID
merchantId: 'XXXXXXXXXXXXX', // 微信支付分配的商户号
amount: null, // 订单金额,单位为分
orderNumber: null // 自定义订单编号
};
},
methods: {
createPayOrder() {
// 调用后台接口,获取生成商户订单参数
let data = {
appId: this.appId,
merchantId: this.merchantId,
amount: this.amount,
orderNumber: this.orderNumber
};
// 发送请求,获取预支付信息
this.$http.post('/pay/unifiedOrder', data).then(resp => {
wx.requestPayment({
// 获取支付信息成功后,使用官方 API 调起微信支付
timeStamp: resp.data.timeStamp,
nonceStr: resp.data.nonceStr,
package: resp.data.package,
signType: resp.data.signType,
paySign: resp.data.paySign,
success(res) {
console.log('支付成功');
},
fail(res) {
console.log('支付失败');
},
complete(res) {
console.log('支付完成');
}
})
})
}
}
}三、配置微信支付参数
在创建商户订单之后,需要在 uniapp 中配置微信支付参数,包括商户号、接口密钥、证书等。在配置参数时,需要注意以下几点:
网趣网上购物系统支持PC电脑版+手机版+APP,数据一站式更新,支持微信支付与支付宝支付接口,是专业的网上商城系统,网趣商城系统支持淘宝数据包导入,实现与淘宝同步更新!支持上传图片水印设置、图片批量上传功能,同时支持订单二次编辑以及多级分类隐藏等实用功能,新版增加商品大图浏览与列表显示功能,使分类浏览更方便,支持最新的支付宝即时到帐接口。
- 商户号:微信支付分配的商户号;
- 接口密钥:作为商户签名的密钥,需要保存在后台服务器中;
- 证书路径:如果需要使用退款、红包等高级功能,需要上传证书至微信支付平台。
在 uniapp 中,可以通过以下方式配置微信支付参数:
function getSign(params) {
let str = '';
for (let key in params) {
str += key + '=' + params[key] + '&';
}
str += 'key=' + API_KEY;
return md5(str).toUpperCase();
}
function createPayParams(data) {
let params = Object.assign({}, data, {
appid: APP_ID, // 微信开放平台分配的 AppID
mch_id: MERCHANT_ID, // 微信支付分配的商户号
nonce_str: Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15), // 随机字符串
notify_url: NOTIFY_URL, // 异步通知地址,接收微信支付异步通知回调地址
spbill_create_ip: '127.0.0.1' // 终端IP
});
let sign = getSign(params);
return `
支付测试
APP支付测试
${params.mch_id}
${params.nonce_str}
${params.notify_url}
${data.orderNumber}
${params.spbill_create_ip}
${params.total_fee}
APP
${sign}
`;
}四、调用支付接口
在配置完成微信支付参数后,即可通过 uniapp 中提供的官方 API 调用微信支付接口,并传入参数实现在线支付功能。在调用支付接口时,需要注意以下几点:
- 小程序或 App 必须具备微信支付的权限;
- 需要传入支付参数,包括商户订单号、金额、交易类型等;
- 支付成功后,可以通过接收微信异步通知判断支付结果。
在 uniapp 中,可以通过以下方式调用微信支付接口:
let params = {
appId: APP_ID, // 微信开放平台分配的 AppID
partnerId: MERCHANT_ID, // 微信支付分配的商户号
prepayId: prepayId, // 预支付交易会话标识
package: 'Sign=WXPay', // 扩展字段,暂填写固定值 Sign=WXPay
nonceStr: nonceStr, // 随机字符串,不长于32位
timeStamp: timeStamp.toString(), // 时间戳
sign: getSign({ // 根据微信支付签名算法生成签名
appId: APP_ID,
partnerId: MERCHANT_ID,
prepayId: prepayId,
package: 'Sign=WXPay',
nonceStr: nonceStr,
timeStamp: timeStamp.toString()
})
};
wx.requestPayment({
appId: APP_ID,
timeStamp: timeStamp.toString(),
nonceStr: nonceStr,
package: params.package,
signType: 'MD5',
paySign: params.sign,
success(res) {
console.log('支付成功');
},
fail(res) {
console.log('支付失败');
}
});以上就是 uniapp 中使用微信支付功能的具体步骤,包括注册微信支付账号、创建商户订单、配置微信支付参数、调用支付接口等。在应用开发过程中,完善的支付功能可以极大地提高用户购买商品或服务的体验,增加应用或网站的转化率和收益。










