1. UniApp概述
UniApp是由DCloud公司推出的一款跨平台开发工具,能够快速实现一份代码同时部署到多个平台,包括iOS、Android、H5、小程序等。通过UniApp,我们可以方便地实现支付宝与微信支付的集成与使用。
2. 支付宝支付集成
2.1. 配置支付宝开发者账号
首先,我们需要有一份支付宝开发者账号,并前往支付宝开发平台创建应用以获取相应的应用ID和私钥等信息。具体步骤如下:
1. 前往支付宝开发平台(https://openhome.alipay.com/platform/home.htm)注册开发者账号。
2. 登录后,进入控制台,在应用管理中点击创建应用。
3. 填写相关应用信息,包括应用名称、应用类型、应用描述、LOGO等,并提交审核。
4. 应用审核通过后,我们可以获取到应用ID和应用私钥等信息,这些信息稍后会用到。
2.2. 安装相关插件
UniApp针对支付宝和微信支付的集成,都需要安装相关的插件,这里我们先安装支付宝支付插件。在HBuilderX的插件市场中搜索“支付宝插件”并安装,或者在命令行中执行以下命令安装:
npm install uniapp-alipay --save
2.3. 支付宝SDK接入
接下来,我们需要将支付宝SDK接入到我们的项目中。在HBuilderX的项目根目录下创建一个libs文件夹,并将下载好的alipay.js SDK文件拷贝到该目录下。然后,在manifest.json文件中引入SDK文件和插件:
{
"app-plus": {
"plugins": {
"uniapp-alipay": {
"version": "1.0.0",
"provider": "uniapp.alipay"
}
}
},
"mp-weixin": {
"plugins": {
"uniapp-alipay": {
"version": "1.0.0",
"provider": "uniapp.alipay"
}
}
},
"mp-alipay": {
"plugins": {
"uniapp-alipay": {
"version": "1.0.0",
"provider": "uniapp.alipay"
}
}
},
"libs": {
"alipayjs-sdk": {
"version": "1.0.0",
"path": "./libs/alipay.js"
}
}
}
2.4. 调用支付宝支付接口
支付宝支付接口需要传入一些必要的参数,包括应用ID、支付金额、订单标题、订单详情等等。我们可以将这些参数封装成一个对象,并调用支付宝插件中的alipay方法来发起支付申请。具体代码如下:
/**
* 获取订单信息
*/
function getOrder() {
// 设置订单金额
let money = '1.00';
// 构造订单数据
let order = {
app_id: '应用ID',
method: 'alipay.trade.app.pay', // 固定值
charset: 'utf-8', // 参数编码
notify_url: '',
timestamp: Math.floor(new Date().getTime() / 1000), // 时间戳
version: '1.0', // 版本号
biz_content: JSON.stringify({
subject: '订单标题',
out_trade_no: Date.now().toString(), // 生成订单号
total_amount: money,
product_code: 'QUICK_MSECURITY_PAY',
body: ''
}) // 订单详情
};
// 使用私钥对订单信息进行签名
let sign = CryptoJS.RSA.encrypt(JSON.stringify(order), '应用私钥');
// 将签名串转化为基础64编码
sign = encodeURIComponent(CryptoJS.enc.Base64.stringify(sign.ciphertext));
// 修改订单信息中的签名
order.sign = sign;
// 返回订单信息
return JSON.stringify(order);
}
/**
* 调用支付接口
*/
function doPay() {
// 获取订单信息
let order = getOrder();
// 调用支付宝支付接口
uni.requestPayment({
provider: 'alipay',
orderInfo: order,
success: function(res) {
console.log('支付成功', res);
},
fail: function(err) {
console.log('支付失败', err);
}
});
}
3. 微信支付集成
3.1. 配置微信开发者账号
类似支付宝支付集成,我们也需要有一份微信开发者账号,并前往微信开放平台创建应用以获取相应的应用ID和密钥等信息。具体步骤如下:
1. 前往微信开放平台(https://open.weixin.qq.com/)注册开发者账号。
2. 登录后,在应用管理中点击创建应用。
3. 填写相关应用信息,包括应用名称、应用类型、应用描述、LOGO等,并提交审核。
4. 应用审核通过后,我们可以获取到应用ID和密钥等信息,这些信息稍后会用到。
3.2. 安装相关插件
与支付宝支付插件类似地,在HBuilderX的插件市场中搜索“微信支付插件”并安装,或者在命令行中执行以下命令安装:
npm install uniapp-wechat --save
3.3. 微信支付API接入
微信支付需要调用微信提供的API进行接入,因此我们需要在manifest.json文件中配置微信支付的API接口地址和相关参数:
{
"app-plus": {
"plugins": {
"uniapp-wechat": {
"version": "1.0.0",
"provider": "madao-wechat"
}
}
},
"mp-weixin": {
"plugins": {
"uniapp-wechat": {
"version": "1.0.0",
"provider": "madao-wechat"
}
},
"wechat": {
"appid": "应用ID",
"mchid": "商户号",
"apikey": "商户密钥",
"notify_url": "回调地址"
}
},
"mp-alipay": {
"plugins": {
"uniapp-wechat": {
"version": "1.0.0",
"provider": "madao-wechat"
}
}
}
}
3.4. 调用微信支付接口
类似支付宝支付接口,微信支付接口也需要传入一些必要的参数,包括应用ID、商户号、支付金额、订单标题、订单详情等等。我们可以将这些参数封装成一个对象,并调用微信插件中的requestPayment方法来发起支付申请。具体代码如下:
/**
* 获取订单信息
*/
function getOrder() {
// 设置订单金额
let money = 1;
// 构造订单数据
let order = {
appid: '应用ID',
mch_id: '商户号',
nonce_str: Math.random().toString(36).substr(2, 15), // 随机字符串
body: '订单标题',
out_trade_no: Date.now().toString(), // 生成订单号
total_fee: money * 100, // 订单金额(单位为分)
spbill_create_ip: '',
notify_url: '回调地址',
trade_type: 'APP' // 固定值
};
// 统一下单接口需要签名,因此我们要将订单信息进行签名
let sign = signOrder(order, '商户密钥');
// 将签名串添加到订单信息中
order.sign = sign;
// 将订单信息转化为XML格式
let xmlStr = objToXml(order);
// 发起POST请求
return new Promise((resolve, reject) => {
uni.request({
url: 'https://api.mch.weixin.qq.com/pay/unifiedorder',
method: 'POST',
dataType: 'text',
header: {
'content-type': 'application/xml'
},
data: xmlStr,
success: function(res) {
resolve(res);
},
fail: function(err) {
reject(err);
}
});
});
}
/**
* 调用微信支付接口
*/
function doPay() {
// 获取订单信息
getOrder().then(res => {
let xmlStr = res.data;
// 将XML格式的字符串转化为JSON格式
xml2js.parseString(xmlStr, (err, result) => {
let data = result.xml;
// 构造调起微信支付输入参数
let payArgs = {
provider: 'wxpay',
timeStamp: new Date().getTime().toString(),
nonceStr: data.nonce_str[0],
package: 'prepay_id=' + data.prepay_id[0],
signType: 'MD5',
paySign: signPayArgs({
appId: '应用ID',
timeStamp: new Date().getTime().toString(),
nonceStr: data.nonce_str[0],
package: 'prepay_id=' + data.prepay_id[0],
signType: 'MD5'
}, '商户密钥')
};
// 调起微信支付
uni.requestPayment({
...payArgs,
success: function(res) {
console.log('支付成功', res);
},
fail: function(err) {
console.log('支付失败', err);
}
});
});
}).catch(err => {
console.log('获取订单信息失败', err);
});
}
/**
* 对订单信息进行签名
*/
function signOrder(order, key) {
let signStr = '';
for (let item in order) {
if (order[item]) {
signStr += item + '=' + order[item] + '&';
}
}
signStr += 'key=' + key;
let md5 = CryptoJS.MD5(signStr).toString().toUpperCase();
return md5;
}
/**
* 对调起微信支付输入参数进行签名
*/
function signPayArgs(args, key) {
let signStr = '';
for (let item in args) {
if (args[item]) {
signStr += item + '=' + args[item] + '&';
}
}
signStr += 'key=' + key;
let md5 = CryptoJS.MD5(signStr).toString().toUpperCase();
return md5;
}
/**
* 将JSON格式的对象转化为XML格式的字符串
*/
function objToXml(obj) {
let xmlStr = '';
for (let item in obj) {
xmlStr += '<' + item + '>' + obj[item] + '' + item + '>';
}
xmlStr += '';
return xmlStr;
}
4. 总结
通过本文的介绍,我们可以了解到UniApp如何实现支付宝和微信支付的集成与使用。其中,支付宝支付的集成相对简单,只需要配置好应用信息后,调用支付宝插件提供的接口即可完成支付。而微信支付则需要更多的API操作,涉及到订单信息的签名、XML格式的转换等等。无论是哪种支付方式,都需要了解相关的API接口和参数设置才能正常实现。希望本文能够对大家有所帮助。