最近在做uniapp APP得项目,遇到了很多问题这个问题是目前卡的最久得一个问题卡了一个小时。
首先,支付宝支付分为 前端发起支付,和后台发起支付两种。

  • 前端发起支付我之前做微信小程序得时候做过,首先向后台发送订单数据,生成订单。然后由前端调起手机微信支付进行付款。
  • 而这次我们采用得是后台发起支付得方式,得到的返回值是一个<form></form>的表单html结构 自带<script> 里面写的是监听提交按钮事件</script>标签。
  • 简单来说 由后台发起的支付会返回给我们一个html结构,这个够在uniapp中使用 web-view 展示。但是安卓端不兼容。
  • 最终解决办法是由后台把之前POST 请求改成了 GET 请求。
  • 直接把链接复制到了<web-view :src></web-view > 标签的src上面
  • 前端代码

    /支付页面/
    uni.setStorageSync('payUrl', "http://XXX.com/pay/server/phone/goPay2?orderCode=" + orderrequest.orderCode +"&paymentCount=" + orderrequest.paymentCount + "&orderTotalAmount=" + orderrequest.orderTotalAmount +"&parentOrderId=" + orderrequest.parentOrderId + "&buyerId=" + orderrequest.buyerId + "&shipperId=" +orderrequest.shipperId + "")
    /在写webview 的页面 获取这个链接赋值到src上面/

    // web-view页面
    <template>

    <view>
        <web-view :src="url"></web-view>
    </view>

    </template>
    let payUrl = uni.getStorageSync('payUrl');
    this.url = uni.getStorageSync('payUrl');

  • 第二种解决

    const webview = plus.webview.create("", "custom-webview")

                webview.loadURL(链接, {
                    "Referer": "项目域名https://&*^*&%&^%"
                })
    
  • 总结:在uniapp中调用本地静态html URL传参 不适合传入复杂结构 简单结构可以,否则 安卓端不兼容。H5端兼容。
  • 在本地html页面加载ajax请求时存在跨域问题导致请求发不出去返回

    {"readyState":0,"status":0,"statusText":"error"}

  • 在本地html中调用uniapp自带的uni.webview.1.5.2.js中只包含跳转链接
  • 例如 uni.navigateTo等跳转链接
  • 在支付流程上也会有变动,后台调用前端无法拿到支付后的回调。目前只能一直调取后台查询支付状态的一个接口.....很恶心的