123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450 |
- import { gotoOrderAppPayApi, gotoOrderH5PayApi, gotoOrderPayApi, payOrderSuccessApi } from '../api/anotherTFInterface';
- import { getPayMiniProgramQueryApi } from '../api/anotherTFInterface';
- import store from '../store';
- import { getUserId, isH5InWebview } from '.';
- // #ifdef H5
- const jweixin = require('jweixin-module');
- /**
- * 普通H5处理
- * @param payInfo 结算返回的支付信息
- */
- async function payH5InEquipment(payInfo) {
- try {
- const res = await gotoOrderH5PayApi(payInfo);
- location.replace(res.data.mwebUrl);
- } catch (e) {
- uni.showToast({ title: '支付失败', icon: 'none' });
- if ([1, 2].includes(payInfo.purchaseMode)) {
- uni.switchTab({ url: '/pages/order/order' });
- } else if ([3, 4, 5].includes(payInfo.purchaseMode)) {
- uni.redirectTo({ url: '/user/otherServe/payment-completed/index?state=fail' });
- }
- } finally {
- uni.hideLoading();
- }
- }
- /**
- * 微信内H5处理
- * @param payInfo 结算返回的支付信息
- * @param orderId 订单ID
- */
- async function payH5InWechat(payInfo) {
- const res = await gotoOrderPayApi(payInfo);
- jweixin.config({
- debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
- appId: res.data.appId, // 必填,公众号的唯一标识
- timestamp: res.data.timeStamp, // 必填,生成签名的时间戳
- nonceStr: res.data.nonceStr, // 必填,生成签名的随机串
- signature: res.data.paySign, // 必填,签名,见附录1
- jsApiList: ['chooseWXPay'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
- });
- if ([1, 2].includes(payInfo.purchaseMode)) {
- jweixin.ready(function () {
- jweixin.checkJsApi({
- jsApiList: ['chooseWXPay'], // 需要检测的JS接口列表,所有JS接口列表见附录2,
- success(res) {},
- fail(res) {}
- });
- jweixin.chooseWXPay({
- timestamp: res.data.timeStamp, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
- nonceStr: res.data.nonceStr, // 支付签名随机串,不长于 32 位
- package: res.data.package, // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=***)
- signType: res.data.signType, // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'
- paySign: res.data.paySign, // 支付签名
- success(res) {
- // 支付成功后的回调函数
- uni.showToast({ icon: 'none', title: '支付成功' });
- uni.redirectTo({ url: '/another-tf/another-serve/paySuccessful/index?orderId=' + payInfo.orderId });
- },
- cancel(r) {
- uni.showToast({ icon: 'none', title: '用户取消支付' });
- uni.switchTab({ url: '/pages/order/order' });
- },
- fail(res) {
- uni.showToast({ icon: 'none', title: '微信内支付错误' });
- uni.switchTab({ url: '/pages/order/order' });
- }
- });
- });
- jweixin.error(function (res) {
- uni.showToast({ icon: 'none', title: '微信内支付加载失败', duration: 3000 });
- uni.switchTab({ url: '/pages/order/order' });
- });
- } else if ([3, 4, 5].includes(payInfo.purchaseMode)) {
- jweixin.ready(function () {
- jweixin.checkJsApi({
- jsApiList: ['chooseWXPay'], // 需要检测的JS接口列表,所有JS接口列表见附录2,
- success(res) {},
- fail(res) {}
- });
- jweixin.chooseWXPay({
- timestamp: res.data.timeStamp, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
- nonceStr: res.data.nonceStr, // 支付签名随机串,不长于 32 位
- package: res.data.package, // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=***)
- signType: res.data.signType, // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'
- paySign: res.data.paySign, // 支付签名
- success(res) {
- // 支付成功后的回调函数
- uni.showToast({ icon: 'none', title: '支付成功' });
- uni.redirectTo({ url: '/user/otherServe/payment-completed/index' });
- },
- cancel(r) {
- uni.showToast({ icon: 'none', title: '用户取消支付' });
- uni.redirectTo({ url: '/user/otherServe/payment-completed/index?state=fail' });
- },
- fail(res) {
- uni.showToast({ icon: 'none', title: '微信内支付错误' });
- uni.redirectTo({ url: '/user/otherServe/payment-completed/index?state=fail' });
- }
- });
- });
- jweixin.error(function (res) {
- uni.showToast({ icon: 'none', title: '微信内支付加载失败', duration: 3000 });
- uni.redirectTo({ url: '/user/otherServe/payment-completed/index?state=fail' });
- });
- }
- }
- /**
- * H5拉起支付
- * @param payInfo 结算返回的支付信息
- */
- async function h5Pay(payInfo) {
- const ua = navigator.userAgent.toLowerCase();
- if (ua.match(/MicroMessenger/i) == 'micromessenger') {
- await payH5InWechat(payInfo);
- } else {
- await payH5InEquipment(payInfo);
- }
- }
- // #endif
- // #ifdef MP-ALIPAY
- /**
- * 支付宝小程序拉起支付
- * @param payInfo 结算返回的支付信息
- * @return {Promise<void>}
- */
- async function mpAliPay(payInfo) {
- if ([1, 2].includes(payInfo.purchaseMode)) {
- try {
- const res = await gotoOrderPayApi(payInfo);
- uni.requestPayment({
- provider: 'alipay',
- orderInfo: res.data.tradeNo,
- success(payRes) {
- if (payRes.resultCode == '6001') {
- uni.showToast({ icon: 'none', title: '取消支付' });
- uni.switchTab({ url: '/pages/order/order' });
- } else if (payRes.resultCode == '9000') {
- uni.showToast({ icon: 'none', title: '支付成功' });
- uni.redirectTo({ url: '/another-tf/another-serve/paySuccessful/index?orderId=' + payInfo.orderId });
- }
- },
- fail(err) {
- uni.showToast({ icon: 'none', title: '支付取消' });
- uni.switchTab({ url: '/pages/order/order' });
- }
- });
- } catch (e) {
- uni.showToast({ title: '支付宝支付异常', icon: 'none' });
- uni.switchTab({ url: '/pages/order/order' });
- } finally {
- uni.hideLoading();
- }
- } else if ([3, 4, 5].includes(payInfo.purchaseMode)) {
- try {
- const res = await gotoOrderPayApi(payInfo);
- uni.requestPayment({
- provider: 'alipay',
- orderInfo: res.data.tradeNo,
- success(payRes) {
- if (payRes.resultCode == '6001') {
- uni.showToast({ icon: 'none', title: '取消支付' });
- uni.redirectTo({ url: '/user/otherServe/payment-completed/index?state=fail' });
- } else if (payRes.resultCode == '9000') {
- uni.showToast({ icon: 'none', title: '支付成功' });
- uni.redirectTo({ url: '/user/otherServe/payment-completed/index' });
- }
- },
- fail(err) {
- uni.showToast({ icon: 'none', title: '支付取消' });
- uni.redirectTo({ url: '/user/otherServe/payment-completed/index?state=fail' });
- }
- });
- } catch (e) {
- uni.showToast({ title: '支付宝支付异常', icon: 'none' });
- uni.redirectTo({ url: '/user/otherServe/payment-completed/index?state=fail' });
- } finally {
- uni.hideLoading();
- }
- }
- }
- // #endif
- // #ifdef MP-WEIXIN
- /**
- * 微信小程序拉起支付
- * @param payInfo
- * @return {Promise<void>}
- */
- async function mpWechatPay(payInfo) {
- if ([1, 2].includes(payInfo.purchaseMode)) {
- try {
- const res = await gotoOrderPayApi(payInfo);
- uni.requestPayment({
- provider: 'wxpay',
- timeStamp: res.data.timeStamp,
- nonceStr: res.data.nonceStr,
- package: res.data.package,
- signType: res.data.signType,
- paySign: res.data.paySign,
- success: async (payRes) => {
- // 拼团微信支付成功回调
- if (payInfo.collageId) await payOrderSuccessApi({ orderId: payInfo.orderId, collageId: payInfo.collageId });
- uni.showToast({ icon: 'none', title: '支付成功' });
- uni.redirectTo({ url: '/another-tf/another-serve/paySuccessful/index?orderId=' + payInfo.orderId });
- },
- fail(err) {
- uni.showToast({ icon: 'none', title: '用户取消支付' });
- uni.switchTab({ url: '/pages/order/order' });
- }
- });
- } catch (e) {
- uni.showToast({ title: '微信支付拉起失败', icon: 'none' });
- uni.switchTab({ url: '/pages/order/order' });
- }
- } else if ([3, 4, 5].includes(payInfo.purchaseMode)) {
- try {
- const res = await gotoOrderPayApi(payInfo);
- uni.requestPayment({
- provider: 'wxpay',
- timeStamp: res.data.timeStamp,
- nonceStr: res.data.nonceStr,
- package: res.data.package,
- signType: res.data.signType,
- paySign: res.data.paySign,
- success: async (payRes) => {
- // 拼团微信支付成功回调
- if (payInfo.collageId) await payOrderSuccessApi({ orderId: payInfo.orderId, collageId: payInfo.collageId });
- uni.showToast({ icon: 'none', title: '支付成功' });
- uni.redirectTo({ url: '/user/otherServe/payment-completed/index' });
- },
- fail(err) {
- uni.showToast({ icon: 'none', title: '用户取消支付' });
- uni.redirectTo({ url: '/user/otherServe/payment-completed/index?state=fail' });
- }
- });
- } catch (e) {
- uni.showToast({ title: '微信支付拉起失败', icon: 'none' });
- uni.redirectTo({ url: '/user/otherServe/payment-completed/index?state=fail' });
- }
- }
- }
- // #endif
- // #ifdef APP
- /**
- * App拉起微信支付
- * @param payInfo
- * @return {Promise<void>}
- */
- async function appWechatPay(payInfo) {
- if ([1, 2].includes(payInfo.purchaseMode)) {
- try {
- const res = await gotoOrderAppPayApi(payInfo);
- const obj = {
- appid: res.data.appId,
- noncestr: res.data.nonceStr,
- package: 'Sign=WXPay',
- prepayid: res.data.prepayId,
- timestamp: res.data.timeStamp,
- sign: res.data.paySign,
- partnerid: res.data.partnerId
- };
- uni.requestPayment({
- provider: 'wxpay',
- orderInfo: obj,
- success(payRes) {
- uni.showToast({ icon: 'none', title: '支付成功' });
- uni.redirectTo({ url: '/another-tf/another-serve/paySuccessful/index?orderId=' + payInfo.orderId });
- },
- fail(err) {
- uni.showToast({ icon: 'none', title: '用户取消支付' });
- uni.switchTab({ url: '/pages/order/order' });
- }
- });
- } catch (e) {
- uni.showToast({ title: 'APP拉起微信支付失败', icon: 'none' });
- uni.switchTab({ url: '/pages/order/order' });
- } finally {
- uni.hideLoading();
- }
- } else if ([3, 4, 5].includes(payInfo.purchaseMode)) {
- try {
- const res = await gotoOrderAppPayApi(payInfo);
- const obj = {
- appid: res.data.appId,
- noncestr: res.data.nonceStr,
- package: 'Sign=WXPay',
- prepayid: res.data.prepayId,
- timestamp: res.data.timeStamp,
- sign: res.data.paySign,
- partnerid: res.data.partnerId
- };
- uni.requestPayment({
- provider: 'wxpay',
- orderInfo: obj,
- success(payRes) {
- uni.showToast({ icon: 'none', title: '支付成功' });
- uni.redirectTo({ url: '/user/otherServe/payment-completed/index' });
- },
- fail(err) {
- uni.showToast({ icon: 'none', title: '用户取消支付' });
- uni.redirectTo({ url: '/user/otherServe/payment-completed/index?state=fail' });
- }
- });
- } catch (e) {
- uni.showToast({ title: 'APP拉起微信支付失败', icon: 'none' });
- uni.redirectTo({ url: '/user/otherServe/payment-completed/index?state=fail' });
- } finally {
- uni.hideLoading();
- }
- }
- }
- // #endif
- /**
- * 银行卡支付
- * @param payInfo
- * @return {Promise<void>}
- */
- async function bankCardPay(payInfo) {
- try {
- let res;
- if ([1, 2].includes(payInfo.purchaseMode)) {
- } else if (payInfo.purchaseMode === 3) {
- // res = await payGotoH5SettlePayApi(payInfo)
- // uni.redirectTo({ url: '/user/otherServe/payment-completed/index' })
- } else if (payInfo.purchaseMode === 4) {
- // res = await payGotoH5VoucherApi(payInfo)
- // uni.redirectTo({ url: '/user/otherServe/payment-completed/index' })
- }
- } catch (e) {
- if ([1, 2].includes(payInfo.purchaseMode)) {
- } else if ([3, 4, 5].includes(payInfo.purchaseMode)) {
- uni.showToast({ title: '银行卡支付失败', icon: 'none' });
- uni.redirectTo({ url: '/user/otherServe/payment-completed/index?state=fail' });
- }
- } finally {
- uni.hideLoading();
- }
- }
- /**
- * 通联H5处理
- * @param payInfo 结算返回的支付信息
- */
- async function h5TonglianPay(payInfo) {
- try {
- const res = await gotoOrderH5PayApi(payInfo);
- console.log(res);
- if (!res.data.package) {
- // 零元支付情况
- uni.redirectTo({ url: '/user/otherServe/payment-completed/index' });
- } else {
- const payData = JSON.parse(res.data.package);
- const form = document.createElement('form');
- form.setAttribute('action', res.data.mwebUrl);
- form.setAttribute('method', 'POST');
- let input;
- for (const key in payData) {
- input = document.createElement('input');
- input.name = key;
- input.value = payData[key];
- form.appendChild(input);
- }
- document.body.appendChild(form);
- form.submit();
- document.body.removeChild(form);
- }
- } catch (e) {
- console.log(e);
- uni.showToast({ title: '支付失败', icon: 'none' });
- if ([1, 2].includes(payInfo.purchaseMode)) {
- uni.switchTab({ url: '/pages/order/order' });
- } else if ([3, 4, 5].includes(payInfo.purchaseMode)) {
- uni.redirectTo({ url: '/user/otherServe/payment-completed/index?state=fail' });
- }
- } finally {
- uni.hideLoading();
- }
- }
- /**
- * 处理支付
- * @param submitResult 结算结果
- */
- export async function handleDoPay(submitResult, purchaseMode) {
- uni.showLoading({
- mask: true,
- title: '支付中...'
- });
- if (purchaseMode) { // 1-商城 2-本地 3-入驻 4-代金券 5-地图红包
- const submitInfo = { ...submitResult, purchaseMode };
- if (submitInfo.paymentMode === 999) {
- await bankCardPay(submitInfo);
- } else if (submitInfo.paymentMode === 1) {
- // 微信支付
- // #ifdef APP
- await appWechatPay(submitInfo);
- // #endif
- // #ifdef MP-WEIXIN
- await mpWechatPay(submitInfo);
- // #endif
- // #ifdef H5
- await h5Pay(submitInfo);
- // #endif
- } else if ([2, 3].includes(submitInfo.paymentMode)) {
- // 支付宝
- // #ifdef MP-ALIPAY
- await mpAliPay(submitInfo);
- // await appWechatPay(submitResult,this.orderId)
- throw new Error('支付宝相关支付暂时只支持支付宝小程序');
- // #endif
- } else if (submitInfo.paymentMode === 4) {
- // #ifdef H5
- if (store.state.app.isInMiniProgram || isH5InWebview()) {
- const payAppesult = await getPayMiniProgramQueryApi({
- orderNo: submitInfo.orderSn,
- purchaseMode,
- paymentMode: submitInfo.paymentMode
- });
- let query = '';
- for (const key in payAppesult.data) {
- query += key + '=' + payAppesult.data[key] + '&';
- }
- wx.miniProgram.navigateTo({
- url: '/pages/loading/loading?' + query + 'orderNo=' + submitInfo.orderSn + '&userId=' + getUserId()
- });
- } else {
- await h5TonglianPay(submitInfo);
- }
- // #endif
- } else if ([5, 6].includes(submitInfo.paymentMode)) {
- await h5TonglianPay(submitInfo);
- }
- }
- }
|