在前段时间的开发需要中,有一项uniapp H5和APP端接入支付宝性能的需要,尽管这项性能前端的工作并不多,但还是依据这次的开发教训和踩过的坑做一个分享。
<font face="黑体">首先在对我的项目开启领取性能,在我的项目的manifest.json文件中勾选APP模块配置中的Payment领取模块,并且勾选支付宝领取和上面列出的ios和Android</font>
<font face="黑体">依据须要在h5跟APP端都做支付宝的唤起领取,唤起orderInfo 的格局在APP和h5上有很大的差别,在这一点上节约了一些工夫,在此贴出支付宝的文档</font>
支付宝开发文档
<font face="黑体">H5端唤起支付宝。所须要的参数是后端返回的一个form表单,获取胜利后端返回的内容当前将表单内容用v-html置入标签中,而后提交表单便会执行唤起</font>
<font face="黑体">针对于支付宝领取的应用,截取外围代码如下</font>
<template> <view> <!-- 省略无关内容 --> <view class="alipaysubmit" v-html="formContent"></view> </view></template><script> export default { data(){ return { formContent:'' } }, methods:{ getOrderPay: function(orderNo, message) { let that = this; let goPages = '/pages/order_pay_status/index?order_id=' + orderNo + '&msg=' + message; wechatOrderPay({ orderNo: orderNo, payChannel: that.payChannel, payType: that.payType, scene: that.productType==='normal'? 0 :1177 //下单时小程序的场景值 }).then(res=>{ switch (res.data.payType) { //领取类型 case 'alipay': //支付宝领取 //#ifdef H5 if (this.$wechat.isWeixin()) { uni.redirectTo({ url: `/pages/users/alipay_invoke/index?id=${orderNo}` //公众号中应用支付宝领取是做了一个到浏览器中领取的疏导,因为微信浏览器不反对唤起支付宝 }); } else { //h5领取 uni.hideLoading(); that.formContent = res.data.alipayRequest; //后端给的form表单,也是唤起支付宝的要害 that.$nextTick(() => { document.forms['punchout_form'].submit(); //这里就是提交表单唤起支付宝,中括号中的name名称,要与后端给的form表单name名称统一, }) } //#endif // #ifdef APP-PLUS let alipayRequest = res.data.alipayRequest; uni.requestPayment({ provider: 'alipay', orderInfo: alipayRequest, //APP端唤起支付宝所需的orderInfo,数据类型为string success: (e) => { uni.showToast({ title: "领取胜利" }) setTimeout(res => { uni.navigateTo({ url:'/pages/users/alipay_return/alipay_return?out_trade_no=' + orderNo + '&payChannel=' + 'appAlipay' }) }, 1000) }, fail: (e) => { uni.showModal({ content: "领取失败", showCancel: false, success: function(res) { if (res.confirm) { //点击确认的操作 uni.navigateTo({ url:'/pages/users/alipay_return/alipay_return?out_trade_no=' + orderNo + '&payChannel=' + 'appAlipay' }) } else if (res.cancel) { } } }) }, complete: () => { uni.hideLoading(); }, }); // #endif break; } }) } } }</script>
<font face="黑体">其实开发实现当前发现APP端唤起支付宝更为简略,然而这个过程中踩过一个坑,我认为orderInfo的值能够参照文档和后端给的一些键值对在前端本人拼接,然而总是唤起失败,起初分割支付宝的蚂蚁技术支持核心的客服,通过沟通当前,才晓得这个orderInfo必须在后端用支付宝SDK生成当前返回给前端,这样一来,果然唤起胜利。</font>