• 微信小程序与webview交互实现支付


    实现原理:点击h5网页的支付按钮——(跳转)——>嵌套改h5的小程序的支付页面——(处理支付)——>跳转至支付完成后的页面

    demo地址:https://gitee.com/v-Xie/wxpay.git

    注意:(1)网页h5中,引入微信的jssdk

    <script type="text/javascript" src="//res.wx.qq.com/open/js/jweixin-1.3.2.js"></script>

    (2)小程序嵌套h5页面后,需要在微信公众平台配置h5网页的业务逻辑名,否则无法访问(且配置业务逻辑名的小程序只能是企业小程序,个人小程序暂时无法实现)。

    操作:登录微信公众平台————开发——————开发设置

    <!--网页h5中-->
          <script type="text/javascript" src="//res.wx.qq.com/open/js/jweixin-1.3.2.js"></script>
    	
          <a class="btn" @click="jumpPay">点击支付</a>
    	 
          jumpPay:function(){
            const ordercode=this.$route.query.ordercode;
            console.log(1111111);
            const url=`/pages/wxPay/index?ordercode=${ordercode}`;
            alert('url:' + url);
            //跳转到小程序支付界面wxPay
            wx.miniProgram.navigateTo({
              url: url
            });
          },
    

     小程序目录 

    <!--webview中(小程序page)-->
    //pages/lnyc2019/index.wxml
     <web-view class='page_web' src="{{url}}"></web-view>
    
    //pages/lnyc2019/index.js
    Page({ 
      data: { 
        url:'https://xxxxxxxx/wxmini/index.html'//h5地址 
      } 
    })
    

      

      

    <!--wxPay中(小程序page)-->
    // pages/wxPay/index.js
    Page({
      data: {
        payTempcode:'',
        ordercode:'',
        payParam:{}
      },
      onLoad: function (options) {
        console.log('支付开始');
        console.log(options);
        this.setData({
          ordercode: options.ordercode
        });
        this.getTempcode();
      },
      // 换取支付临时code
      getTempcode:function(){
        wx.login({
          success: res => {
            // 发送 res.code 到后台换取 openId, sessionKey, unionId
            this.setData({
              payTempcode:res.code
            });
            console.log('支付code:', this.data.payTempcode);
    
            this.getPayinfo();
          }
        })
      },
      // 换取支付参数
      getPayinfo:function(){
        var self=this;
        wx.request({
          url: 'https://xxxxxx/pay/xcxpay',//后台接口地址
          data: {
            'wxcode': self.data.payTempcode,
            'ordercode': self.data.ordercode,
            'gid': x,
          },
          method: 'POST',
          success: function (res) {
            console.log(res.data.data.payinfo);
            self.setData({
              payParam: res.data.data.payinfo
            });
            console.log('支付的订单====',self.data.ordercode);
            // 调起支付
            wx.requestPayment({
              'timeStamp': self.data.payParam.time,//为字符串,否则报错
              'nonceStr': self.data.payParam.nonce_str,
              'package': `prepay_id=${self.data.payParam.prepay_id}`,
              'signType': 'MD5',
              'paySign': self.data.payParam.paysign,
              'success': function (res) {
                console.log(res)
                console.log('=======支付成功==========');
                wx.navigateTo({
                  url: `/pages/lnyc2019/detail?ordercode=${self.data.ordercode}`
                })
              },
              'fail': function (res) {
                console.log(res)
                console.log('=======支付失败==========')
                wx.navigateBack({
                  delta: 1//返回1个页面
                })
              }
            })
          }
        })
      }
    
    
    })  

      附:  老是有人问为何支付不起?不过我没遇到过也不懂后端,遇到过的可以看看下面这位童鞋的文章。
    https://www.jianshu.com/p/aa29852ab695

    一步一叩首,今天的自己比昨天好一点就行,明天的自己需追寻
  • 相关阅读:
    day77
    75
    ElasticSearch集群的配置
    虚拟机VMware Workstation搭建Linux集群——VMware Tools的安装与配置
    ElasticSearch通过Rest Http API完成基本操作
    Maven笔记
    Oracle通过PL/SQL Developer导出数据为CSV格式,VARCHAR2类型的字段如果存入的是数值(例如3307830000004059)太长,最后一位会被置为0
    Redis的安装与配置
    2017 3月份以来入职感受
    Java设计模式(05-- 代理模式模式 )
  • 原文地址:https://www.cnblogs.com/lingXie/p/10531286.html
Copyright © 2020-2023  润新知