微信H5页面实现微信小程序支付

这篇具有很好参考价值的文章主要介绍了微信H5页面实现微信小程序支付。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景:

在微信H5页面已经实现了微信JSAPI的网页支付,老板要求把整个业务线快速转移到微信小程序中,作为懒惰的程序员来说,直接把页面嵌套到小程序不就行了。说干就干,在小程序中设置好基本信息后,一预览居然成功了,一切看来是那么顺利,可到了系统的支付环节时,小程序是无法调用JSAPI微信支付的,难不成要重构所有页面转成小程序?这可是个大工程,作为业余前端的我来说肯定搞不定。于是在网上就搜索了一下,确实有解决方案,楼主就花点时间给大家整理一下。

前提条件:

了解微信支付相关的接口文档,有微信小程序的基本开发经验。

思路:

小程序打开H5页面后,在需要调用微信支付的页面用js做当前页面环境判断:


var is_weixin_app = window.__wxjs_environment === 'miniprogram';

如果是在小程序中打开,则通过wx.miniProgram.navigateTo 方法跳转到小程序的内置页面:


<script src="https://res2.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
if(is_weixin_app){
wx.miniProgram.navigateTo({url:'/pages/pay/pay?api_token='+api_token+'&order_id='+order_id+'&amount='+order_amount});
}

在小程序内置页面pay中获取传过来的参数,做业务处理,然后调用小程序的支付接口,获取小程序需要的关键支付参数(该方法可参考微信支付对接文档:小程序支付开发指引):


'timeStamp': mydata.timeStamp,
'nonceStr': mydata.nonceStr,
'package': mydata.package,
'signType': mydata.signType,
'paySign': mydata.paySign,

小程序支付需要的openid参数,这个openid和微信公众号的openid不是相同的,所以小程序内置app.js还需要获取小程序的openid(微信小程序无需授权可直接根据code获取openid,微信公开接口:https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code),并将openid存在全局变量中:


App({
  onLaunch() {
    let that = this;
    wx.login({
      success (res) {
          if (res.code) {
              //发起网络请求
              wx.request({
                  url: 'https://localhost/api/home/wxapp_openid', //接口地址
                  data: {
                    code: res.code
                  },
                  success: function (res){
                    that.globalData.openid = res.data.data.openid;
                  }
              })
          }
      }
  })
  
  },
  globalData: {
    userInfo: null,
    openid:''
  }
})
小程序页面构造截图:
小程序嵌套h5页面调起支付,日常学习,学习,微信小程序,前端,小程序,小程序支付

说明:index是小程序的首页,用来打开H5的链接


---index.js代码:
Page({
  data: {
    bg_url : "https://localhost"
  },
  onLoad() {
  },
})


---index.wxml代码:
<!--index.wxml-->
<official-account></official-account>
<web-view src="{{bg_url}}"></web-view>

pay是H5链接支付时跳转到的小程序支付页面文章来源地址https://www.toymoban.com/news/detail-623706.html


---pay.js代码:
let order_id=0,amount=0,quotation_id=0,api_token=0;
var app = getApp();
Page({
  /**
   * 页面的初始数据
   */
  data: {},
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    order_id=options.order_id;
    amount=options.amount;
    quotation_id=options.quotation_id;
    api_token=options.api_token;
    this.submitInfo();
  },
  submitInfo(){
    wx.showLoading({
      title: '微信支付...',
      mask: true
    });
    wx.request({
      url: 'https://localhost/api/order/pay_request', 
      data: {
        type:1,
        pay_mode:3,
        order_id: order_id,
        amount:amount,
        quotation_id:quotation_id,
        api_token:api_token,
        openid:app.globalData.openid
      },
      success: function (res) {
        wx.hideLoading();
        if (res.data.ret == "200") {
          let mydata = res.data.data.data;
          wx.requestPayment(
            {
              'timeStamp': mydata.timeStamp,
              'nonceStr': mydata.nonceStr,
              'package': mydata.package,
              'signType': mydata.signType,
              'paySign': mydata.paySign,
              'success': function (e) { //支付成功
                wx.showToast({
                  title: '支付成功',
                  icon: 'success',
                  duration: 1200,
                  mask: true,
                  success: function ()
                  {
                    setTimeout(function () {
                      wx.navigateBack(); 
                    }, 1500);
                  }
                });

              },
              'fail': function (e) { //支付取消或出错
              //  wx.navigateBack();
              }
            })
        }
        else {
          wx.showToast({
            title: '该订单已失效',
            icon: 'success',
            duration: 3000,
            mask: true,
            success: function () {
              setTimeout(function () {
                wx.navigateBack();
              }, 1500);
            }
          })
        }
      }
    });
  }
})

---pay.wxml代码
<view class='body'>
<form bindsubmit="submitInfo" report-submit='true'>
<view class='body-view'><text >微信小程序支付</text></view>
<view class="btn-area">
<button type="primary" form-type="submit">确认支付</button>
</view>
</form>
</view>
来看一下最后的效果:
小程序嵌套h5页面调起支付,日常学习,学习,微信小程序,前端,小程序,小程序支付

到了这里,关于微信H5页面实现微信小程序支付的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 前端实现微信支付(H5,微信小程序)

    通常一些电商项目使用到微信支付操作,所以简单地介绍一下微信支付的具体流程。 微信支付是微信内置微信浏览器(其他浏览器不支持)或者微信小程序的支付接口,主要负责用户对商家执行支付操作的流程。 例如常见的电商在下单环节,就需要通过使用微信支付接口,

    2024年02月08日
    浏览(55)
  • 小程序webview组件,小程序和webview交互,小程序内联h5页面,小程序webview内网页实现微信支付

    小程序支持webview以后,我们开发的好多h5页面,就可以直接在小程序里使用了,比如我们开发的微信商城,文章详情页,商品详情页,就可以开发一套,多处使用了。我们今天来讲一讲。在小程序的webview里实现微信支付功能。因为微信不允许在小程序的webview里直接调起微信

    2024年02月09日
    浏览(63)
  • 微信小程序内嵌h5页面,实现动态设置顶部标题的功能

    一、需求描述 使用HBuilder X作为开发工具,vue作为开发语言,开发微信小程序。微信小程序页面内嵌h5页面,即web-view/web-view标签。通过设置不同url连接地址,设置不同的标题。 二、失败做法 页面A嵌入h5页面,需要给A设置标题。最开始写法是在lonload页面内,使用如下语句实现

    2024年02月04日
    浏览(74)
  • uniapp实现微信小程序内嵌h5页面的相互跳转

    前期准备3个页面,小程序内2个,h5一个。 小程序内:操作页pageA,展示容纳h5的展示页PageWebview.vue。 h5:h5页面pageB,并且有可以访问的线上url。 【微信小程序pageA-内嵌h5页面pageB】 1.1 pageA实现点击跳转,将pageB的访问地址url拼接,并进入展示页PageWebview.vue 1.2 PageWebview.vue页面用

    2024年02月12日
    浏览(69)
  • 微信小程序嵌套的H5使用小程序分享(分享微信好友或朋友圈)

    嵌套在微信小程序中的H5想要使用小程序自带分享功能,分享H5的页面给微信好友或朋友圈 H5中可使用wx.miniProgram.postMessage向小程序的webview发送消息,会触发组件的message事件,在小程序webview页面onShareAppMessage,onShareTimeline中进行使用。

    2024年02月13日
    浏览(70)
  • 微信小程序学习实录5(H5嵌入小程序、map组件、地图调起功能、腾讯百度高德导航页、返回web-view页)

    创建容器 地图家长 在H5页面引入 //res.wx.qq.com/open/js/jweixin-1.6.0.js ,建议使用高版本; 点击返回按钮 调用微信小程序和H5通用API 判断是否在微信小程序环境中 地图调起,再次返回小程序页 获取H5传递参数的方式为: console.log(options) latitude和longitude必须为数字类型,不支持字符

    2024年02月07日
    浏览(95)
  • 小程序内嵌H5,调起微信分享

    该功能时作为H5调起小程序的微信分享 1:小程序方 在webview页面,打开分享的权限 2:在小程序内写 onShareAppMessage方法,用来获取在哪个页面调起的微信分享, 3:在2中的这处代码,是用来劫持分享,并自定义分享的, 4:转发出去后,通过用户的点击再次回来时,在webview页

    2024年02月08日
    浏览(48)
  • uni-app | 小程序嵌入H5页面实现支付功能

    前一阵在做公司小程序时,有个需要对接支付的功能。但是本着订单数据和支付统一入口的设计原则,计划是对接公司商城现有的支付体系。故本方案是分析对接商城支付几种可行方案以及每种方案的可行性,最后综合选出一种最佳的方案。 实现方式 跳转商城小程序支付 跳

    2024年02月07日
    浏览(69)
  • taro 支付宝/微信小程序/h5 上传 - base64的那些事儿

    支付宝小程序临时path转base64 - 基础库2.0以下 支付宝小程序临时path转base64 - 基础库2.0及以上 微信小程序临时path转base64 h5临时file转base64 h5 base64转file 获取base64大小 h5 压缩base64

    2024年02月10日
    浏览(45)
  • 微信小程序如何跳转H5页面

    1、登录微信公众后台,进入【开发-开发管理-业务域名】,点击修改。 2、首先请下载校验文件,并将文件放置在域名根目录下。 我是把文件放在nginx主机的data目录下,然后通过增加nginx.config配置,重启nginx后可以通过域名直接访问该校验文件;  nginx.config配置如下:  如何

    2024年02月11日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包