uniapp转APP微信支付以及支付宝支付

 按钮部分

<view @tap='toPay('alipay')' class=""></view> 支付宝支付

<view @tap='toPay('wxpay')' class=""></view> 微信支付

 判断是否安卓微信或者支付宝

toPay(payType) {
                uni.getProvider({
                    service: 'payment',
                    success: e => {
                        // e: {"errMsg":"getProvider:ok","service":"payment","provider":["alipay","wxpay"]}
                        let arrStr = e.provider.join(',');
                        if (payType == 'alipay') {
                            if (arrStr.indexOf('alipay') === -1) {
                                uni.showToast({
                                    icon: 'none',
                                    title: '请安装支付宝App'
                                });
                                return;
                            }
                        }
                        if (payType == 'wxpay') {
                            if (arrStr.indexOf('wxpay') === -1) {
                                uni.showToast({
                                    icon: 'none',
                                    title: '请安装微信App'
                                });
                                return;
                            }
                        }

                        // 调用支付
                        this.requestPayment(payType);
                    },
                    fail: e => {}
                });
            },

 根据订单获取支付的参数,支付宝需要穿入的参数是一串字符串。微信支付需要传入的是一个对象

// 2、异步调用支付,先**订单信息
            async requestPayment(payType) {
                let _this = this;
                let orderInfo = await this.getOrderInfo(payType);
                // orderInfo 的值:见下方
                if (orderInfo.data.error_code != 0 && payType != 'wxpay') {
                    uni.showModal({
                        content: orderInfo.msg,
                        showCancel: false
                    });
                    return;
                }

                var map;
                if (payType == 'wxpay') {
                    let data = orderInfo.data.order_arr;
                    console.log(data)
                    map = {
                        appid: data.appid,
                        noncestr: data.noncestr,
                        package: data.package,
                        prepayid: data.prepayid,
                        partnerid: data.partnerid,
                        timestamp: Number(data.timestamp),
                        sign: data.sign
                    };
                } else {
                    map = orderInfo.data.data;
                }

                uni.requestPayment({
                    provider: payType,
                    orderInfo: map,
                    success: e => {

                        uni.showToast({
                            title: '支付成功!',
                            icon: 'none',
                            duration: 2000
                        });
                    },
                    fail: e => {

                        // uni.showModal({
                        //     content: '支付失败,原因为: ' + e.errMsg,
                        //     showCancel: false
                        // });
                    },
                    complete: () => {}
                });
            },

获取订单信息,支付数据

 

// 3、**订单信息
            getOrderInfo(payType) {
                var _this = this;
                let url = this.web_url + '/doctor/';
                let data = {
                    action: payType,
                    order_number: _this.order_number,
                    pay_hash: Math.ceil(Math.random() * 100),
                    amount: _this.projectPrice,
                    token: uni.getStorageSync('tokenData').token
                };

                if (payType == 'wxpay') {
                    data.action = 'wxapp';
                }
                console.log(url)
                console.log(data)
                return new Promise(res => {
                    uni.request({
                        url: url,
                        data: data,
                        header: {
                            'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8' //自定义请求头信息
                        },
                        method: 'POST',
                        dataType: 'json',
                        success: result => {
                            console.log(result)
                            res(result);
                        },
                        fail: e => {

                            res(e);
                        }
                    });
                });
            },

 微信支付失败了会缓存支付的错误,微信支付失败了会缓存支付的错误,微信支付失败了会缓存支付的错误,所以最好用小号测试。一步步检查支付的参数是否正确。如果参数一个个对应的都正确还支付失败,建议卸载微信分身重新登录再支付。我做微信支付的时候被这个坑拦住了一两天才发现,希望可以帮到更多的人。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值