当前位置:网站首页>【uniapp】多种支付方式封装
【uniapp】多种支付方式封装
2022-07-26 07:29:00 【托尼沙滩裤】
在uni-app项目中常用的支付主要有支付宝支付、微信支付、应用余额内支付这几种(剩余的支付方式不是主流,我也就不讲啦,嘻嘻>-<),接下来我对这几种支付方式进行了统一的封装。
封装的好处:不需要碰到支付就写一遍uni的支付调用,很不方便
具体uni.requestPayment说明请看官方文档:
https://uniapp.dcloud.io/api/plugins/payment.html#requestpayment
先看封装代码
/* * 支付 pay.js */
export const pay = (result, self, success, fail) => {
if (result.code === -10) {
self.showError(result.msg);
return false;
}
// 发起微信支付
if (result.data.pay_type == 20) {
//小程序支付
// #ifdef MP-WEIXIN
uni.requestPayment({
// 这里是官方需要的参数--一般是后端获取
provider: 'wxpay',
timeStamp: result.data.payment.timeStamp,
nonceStr: result.data.payment.nonceStr,
package: 'prepay_id=' + result.data.payment.prepay_id,
signType: 'MD5',
paySign: result.data.payment.paySign,
success: res => {
paySuccess(result, self, success);
},
fail: res => {
self.showError('订单未支付成功', () => {
// 这个this.showError是一个提示,我放在main.js
payError(result, fail);
});
},
});
// #endif
//公众号支付
// #ifdef H5
if(self.isWeixin()){
WeixinJSBridge.invoke('getBrandWCPayRequest', JSON.parse(result.data.payment),
function(res) {
if (res.err_msg == "get_brand_wcpay_request:ok") {
paySuccess(result, self, success);
} else if (res.err_msg == "get_brand_wcpay_request:cancel") {
self.showSuccess('支付取消', () => {
payError(result, fail);
});
} else {
self.showError('订单未支付成功', () => {
payError(result, fail);
});
}
}
);
}else{
//h5支付
uni.navigateTo({
url: '/pages/order/pay-h5/pay-h5?order_id='+result.data.order_id+'&order_type='+result.data.order_type,
});
return ;
}
// #endif
// #ifdef APP-PLUS
//微信支付
wxAppPay(result, self,success, fail);
return;
// #endif
}
// 余额支付
if (result.data.pay_type == 10) {
paySuccess(result, self, success);
}
// 支付宝支付
if (result.data.pay_type == 30) {
// #ifdef APP-PLUS
aliAppPay(result, self,success, fail);
// #endif
// #ifdef H5
uni.navigateTo({
url: '/pages/order/alipay-h5/alipay-h5?order_id='+result.data.order_id+'&order_type='+result.data.order_type,
});
// #endif
}
}
/*跳到支付成功页*/
function paySuccess(result, self, success) {
if(success){
success(result);
return;
}
gotoSuccess(result);
}
/*跳到支付成功页*/
function gotoSuccess(result) {
uni.reLaunch({
url: '/pages/order/pay-success/pay-success?order_id=' + result.data.order_id
});
}
/*支付失败跳订单详情*/
function payError(result, fail) {
if(fail){
fail(result);
return;
}
uni.redirectTo({
url: '/pages/order/order-detail?order_id=' + result.data.order_id
});
}
function wxAppPay(result, self,success, fail){
// 获取支付通道
plus.payment.getChannels(function(channels) {
self.channel = channels[0];
console.log(self.channel);
uni.requestPayment({
provider: 'wxpay',
orderInfo: result.data.payment,
success(res) {
paySuccess(result, self, success);
},
fail(error) {
console.log(error);
self.showError('订单未支付成功', () => {
payError(result, fail);
});
},
});
}, function(e) {
console.log("获取支付通道失败:" + e.message);
});
}
function aliAppPay(result, self,success, fail){
console.log(result.data.payment);
uni.requestPayment({
provider: 'alipay',
orderInfo: result.data.payment,
success(res) {
paySuccess(result, self, success);
},
fail(error) {
console.log(error);
self.showError('订单未支付成功', () => {
payError(result, fail);
});
},
});
}
说明:pay.js中用到的showError写在main.js中
/** * 显示失败提示框 main.js */
Vue.prototype.showError = function (msg, callback) {
uni.showModal({
title: '友情提示',
content: msg,
showCancel: false,
success: function (res) {
callback && callback();
}
});
};
接下来就是使用
// test.vue
import {
pay } from '@/common/pay.js';
addTwenOrder(bizcontent).then((res) => {
// 这个是接口
if (res) {
uni.hideLoading();
console.log(res.data);// 里面就是一些签名算法、随机字符串等等
pay(res, self); // 这里调用
this.disButton = !this.disButton;
}
})
.catch((res) => {
this.disButton = !this.disButton;
uni.hideLoading();
console.log("回调" + JSON.stringify(res));
});
完结~
边栏推荐
- tensorflow2.x中的量化感知训练以及tflite的x86端测评
- 5、多表查询
- 4. Data integrity
- 博途PLC一阶滞后系统传递函数阶跃响应输出仿真(SCL)
- Relevant configurations of pychart: change font style and size, change picture background, and change the font color of console output
- WCF introductory tutorial II
- 【C语言】你真的了解printf吗?(printf典型易错,强烈建议收藏)
- Moonbeam orbiters program: provides a new way for collectors to participate in moonbeam and Moonriver
- Anaconda installation tutorial - hands on installation
- 【每日一题】919. 完全二叉树插入器
猜你喜欢

Simulation of transfer function step response output of botu PLC first-order lag system (SCL)

NFT digital collection system development: the collision of literature + Digital Collections

OAuth2.0系列博客教程汇总

Compose text and icon splicing to realize drawableleft or drawableright

Countdown 2 days! Based on the cross development practice of Apache dolphin scheduler & tidb, you can greatly improve your efficiency from writing to scheduling

ARIMA model for time series analysis and prediction

博途PLC一阶滞后系统传递函数阶跃响应输出仿真(SCL)

基于Thinkphp的开源管理系统

Installation of Baidu flying paste deep learning framework tutorial in Anaconda

2021全球机器学习大会演讲稿
随机推荐
Anaconda installation tutorial - hands on installation
Regression analysis code implementation
2019中兴捧月·模型压缩方案
NFT digital collection development: digital collections help enterprise development
Wrong Addition
NFT digital collection system development: activating digital cultural heritage
How to expand and repartition the C disk?
Talent column | can't use Apache dolphin scheduler? The most complete introductory tutorial written by the boss in one month [3]
C51 and MDK coexist keil5 installation tutorial
Kdd2022 | uncover the mystery of Kwai short video recommendation re ranking, and recommend the new SOTA
Data platform scheduling upgrade and transformation | operation practice from Azkaban smooth transition to Apache dolphin scheduler
【每日一题】919. 完全二叉树插入器
正则表达式规则以及常用的正则表达式
Crawler data analysis
Hcip--- BGP comprehensive experiment
Modulenotfounderror: no module named 'pip' solution
dcn(deep cross network)三部曲
Apache dolphin scheduler version 3.0.0-beta-1 was released, and flinksql and Zeppelin task types were added
Hcip--- MPLS detailed explanation and BGP route filtering
How to convert multi row data into multi column data in MySQL