H5-ThreeDoorder/static/js/pay.js

123 lines
5.1 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { gminiPayAPI } from "@/api/card/index"
class Payment{
// 微信支付类型
WeChat = 1;
// 支付宝支付类型
Alipay = 2;
// 开始支付
/**
* @param {String} order_sn 订单编号 必传
* @param {String} OrderType 订单类型 必传
* @param {String} pending 支付时需要做什么 选填
* @param {String} payType 支付类型 APP中内嵌H5必填-支付宝支付还是微信支付
* @param {Object} parameters 其余参数 需要携带的其余参数
*/
_Payment_(data){
const {order_sn,OrderType,pending=()=>{},payType = 1,parameters = {}} = data;
/**
* 对付款前做什么处理
* 因为有前车之鉴不同场景的微信支付需要调用不同的支付接口
* 比如:
* 场景A需要调用 /chwl.pay/api1 接口, 场景B景需要调用 /chwl.pay/api2 接口, 传入的参数也不同,
* 所以如果存在以上情况则可以在_beforePayment_函数中对支付前判断做一些处理
* 若不存在以上情况则可以直接在_beforePayment_中直接处理即可
*/
// this._beforePayment_({order_sn,OrderType,pending,payType,...parameters}).then(res => {
// 检查是否是微信支付还时内嵌内嵌H5
if (getApp()['globalData']['parameters']?.isWechat) {
const miniPayRequest = {
// timeStamp: encodeURIComponent(res['data']['miniPayRequest']?.timestamp || res['data']['miniPayRequest']?.timeStamp),
// nonceStr: encodeURIComponent(res['data']['miniPayRequest']['nonceStr']),
// package: encodeURIComponent(res['data']['miniPayRequest']['package']),
// signType: encodeURIComponent(res['data']['miniPayRequest']['signType']),
// paySign: encodeURIComponent(res['data']['miniPayRequest']['paySign']),
// 订单号
order_sn,
OrderType,
...parameters
};
// console.log(res,getApp()['globalData']['parameters']?.isWechat,wx.miniProgram,miniPayRequest,'支付前参数')
// 带着支付参数进入微信支付页面
wx.miniProgram.navigateTo({
url: `/pages/wxpay/h5pay/newpay?data=${encodeURIComponent(JSON.stringify({ order_sn, OrderType}))}`
});
// 延迟n秒后H5内部跳转
// 延迟两秒后执行一些逻辑,就是在跳转微信调起微信支付的过程中执行什么,
// 一般都是在调起微信支付的时候先跳转至支付失败或者成功的页面,然后微信中的支付方法会在支付完成或者失败后退页,
// 或者在调起微信支付的时候先跳转至订单详情页面然后再页面onshow生命周期中执行重新获取订单信息方法来更新支付状态
setTimeout(()=>{
pending();
},2000)
} else {
// 打开微信
openMiniProgram({
path: `pages/wxpay/h5pay/newpay?data=${encodeURIComponent(JSON.stringify({ order_sn, OrderType}))}`,
id: 'gh_faaea9b90759',
// type: 'release',
type: 'preview'
});
}
}
// 付款前需要做什么处理
_beforePayment_(data){
console.log('进入_beforePayment_');
console.log(data['order_sn'],'支付参数order_sn');
console.log(data['OrderType'],'支付参数OrderType');
console.log(data['pending'],'支付参数pending');
console.log(data['payType'],'支付参数payType');
console.log(data['parameters'],'支付参数parameters');
console.log(getApp()['globalData']['parameters']?.isWechat,'支付参数isWechat');
if(getApp()['globalData']['parameters']?.isWechat){
// return gminiPayAPI({order_sn:data['order_sn'],type:data['OrderType']})
return Promise.resolve()
}else{
// console.log(data['payType'],'支付方法');
// // APP中的微信支付与微信支付
// // 微信支付参数
// const paypara = {
// order_no:data['order_sn'],
// type:data['type'],
// redirect_url: `${getApp()['globalData']['urlfileName']}/pages/pay/index?order_sn=${data['order_sn']}&type=${data['type']}&redirect_url=${data['redirect_url']}`
// };
// if(data['payType'] == this['WeChat']) return pay_wechat_h5API(paypara);
// // 支付宝可以直接跳转请求的后台接口,也可以请求后台接口获取表单然后提交提交
// if(data['payType'] == this['Alipay']) return Promise.resolve({
// data:{redirect_url:`https://mall.agrimedia.cn/api/pay_alipay_h5?order_no=${data['order_sn']}&redirect_url=${this.pay_statepage(paypara,`${getApp()['globalData']['urlfileName']}/pages/pay/index`)}`}
// })
}
}
/**
* @支付回调统一管理方法
* @查询订单状态完成之后的回调地址redirect_url
*/
pay_statepage(parameters, redirect_url) {
// console.log(order_sn,'pay_statepage方法参数');
let url = '';
url += redirect_url;
console.log(url, '判断跳转链接');
/**
* @拼接参数
*/
console.log('拼接参数')
if (typeof parameters !== 'undefined') {
for (let key in parameters) {
if (url.indexOf('?') == -1) {
url += `?${key}=${parameters[key]}`;
continue;
};
url += `&${key}=${parameters[key]}`
}
};
console.log(url, '地址');
return url;
}
}
export default new Payment();