微信小程序Ⅰ [关于微信支付的一点思路]

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011415782/article/details/79461942

背景

  • 首先,小程序端的微信支付功能我还没有做,但是之前做过网页版已经微信端唤醒方式的微信支付
  • 因为还需要申请新的域名,过几天才能正式测试,此处是在参考小程序官方文档后的思路

因此文可自成一体,所以被我摘出来了,全文可参考小白的 微信小程序实例——天气预报开发笔记

摸索思考

①. 参考demo获取思路

  • 根据官方Demo中对此功能的一条重要注释如下:
// 此处需要先调用 wx.login 方法获取 code,然后在服务端调用微信接口使用 code 换取 下单用户的 openId
// 具体文档参考 https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-login.html?t=20161230#wxloginobject

②. 服务端要创建接口返回用户openId

根据网上多数编码同行的介绍可知,微信的域名是无法绑定到自己的小程序中的,但是根据前面的经验,可以在自己的服务端借用参数code获取openId,最后以json数据方式返回小程序即可

③. 请求微信支付Url

  • 假设服务端已经能够正确返回我们所需要的openId,此时我们可以考虑唤醒微信支付了,然而根据接口要求需要以下的多个参数:
wx.requestPayment({
   'timeStamp': '',
   'nonceStr': '',
   'package': '',
   'signType': 'MD5',
   'paySign': '',
   'success':function(res){
   },
   'fail':function(res){
   }
})
  • 所以在唤醒微信支付之前,需要先获取上述的参数,而根据之前实现微信支付的经验正好是返回这些信息的

如此一来的思路就是,在服务端还需有一个支付接口,可返回我们需要的上述参数

核心代码参考

  • 此代码是参考官方demo和自己的思路后补充完善的小程序端代码
  • 注意看注释,需要获取相应数据
  requestPayment: function () {
    var self = this
    self.setData({
      loading: true
    })
    // 此处需要先调用wx.login方法获取code,然后在服务端调用微信接口使用code换取 下单用户 的openId
    // 具体文档参考 https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-login.html?t=20161230#wxloginobject
    wx.login({
      success: function (res) {
        if (res.code) {
          //发起网络请求
          console.log('code:' + res.code)
          wx.request({
            url: 'https://api.youself.com/getOpenId', //此处应在服务端根据得到的 code 获取用户的 openid
            data: {
              code: res.code
            },
            success: function (res) {
              console.log('拉取openid成功', res)
              self.setData({
                openid: 'o0rJUwexa08tg4pyFi1tkvJKhxHY' //此处假设已经获得了用户的openID
              })
              //访问服务端 微信支付接口paymentUrl,从而获取后面所需的重要参数
              wx.request({
                url: 'https://api.yourself.com/wxpayment', //此处为举例接口
                data: {
                  openid
                },
                method: 'GET',
                success: function (res) {
                  var timestamp = Date.parse(new Date());
                  timestamp = timestamp / 1000; 
                  var payargs = res.data.payargs
                  //唤醒微信支付
                  wx.requestPayment({
                    timeStamp: timestamp+'',
                    nonceStr: 'payargs.nonceStr',
                    package: 'payargs.package',
                    signType: 'MD5',
                    paySign: 'payargs.paySign',
                    'success': function (res) {
                      console.log('支付-success')
                    },
                    'fail': function (res) {
                      wx.showToast({
                        title: '支付测试中...',
                        icon: 'fail',
                        image: '',
                        duration: 2000,
                        mask: true,
                        success: function (res) { },
                        fail: function (res) { },
                        complete: function (res) { },
                      })
                      console.log('支付-fail')
                    }
                  })

                  self.setData({
                    loading: false
                  })
                }
              })
            },
            fail: function (res) {
              console.log('拉取用户openid失败,将无法正常使用开放接口等服务', res)
              self.setData({
                loading: false
              })
            }
          })
        } else {
          console.log('获取用户登录态失败!' + res.errMsg)
        }
      }
    });
  }

附录

①. 注意

  • 我们所要访问的服务端接口,要保证其域名已经绑定,注意一点,要求协议为 https

②. 后期再做补充

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏源码之家

.htaccess重写让空间绑定多个域名到不同的目录支持多站点

6467
来自专栏GA小站

Launch上的Adapters(适配器)

Adapters是适配器的意思,Launch的适配器的的作用是将构建好的库,上传到服务器的特定位置,起到上传的作用,这个是发布代码必用到的,如果没有设置,配置不...

984
来自专栏IMWeb前端团队

fis3 新特性应用

本文作者:IMWeb 黎清龙 原文出处:IMWeb社区 未经同意,禁止转载 fis3 新特性应用 1 前言 fis3相比fis2,核心思路并没有改变 ...

2319
来自专栏FreeBuf

CVE-2016-10277在MOTO X手机上的漏洞利用实践

CVE-2016-10277是存在于摩托罗拉系列手机的bootloader高危漏洞,可以通过内核命令注入劫持手机的启动流程,加载攻击者控制的initramfs,...

3097
来自专栏学生云

腾讯云弹性网卡绑定多个IPWINDOWS下的设置

网卡绑定多个IP请参考https://cloud.tencent.com/developer/article/1171566

5830
来自专栏JAVA烂猪皮

分布式消息中间件 — MQ

消息队列(Message Queue,简称 MQ)是阿里巴巴集团中间件技术部自主研发的专业消息中间件。用于保证异构应用之间的消息传递。应用程序通过MQ接口进行互...

1333
来自专栏MySQL

分布式消息中间件 — MQ

消息队列(Message Queue,简称 MQ)是阿里巴巴集团中间件技术部自主研发的专业消息中间件。用于保证异构应用之间的消息传递。应用程序通过MQ接口进行互...

5597
来自专栏AndroidTv

AndroidTv开发中常用的adb命令

盒子应用开发时,调试比手机上的开发比较麻烦一点,而且需要经常跟 adb 打交道,不管是 wifi 连接调试,还是应用删除安装等。这里记录一些常用的操作,方便查阅...

42710
来自专栏同步博客

我对RPC的理解

  这篇文章将会用最直白的方式介绍RPC,以及实现RPC客户端的Ajax跨域调用的例子。

1584
来自专栏owent

协程框架(libcopp)v2优化、自适应栈池和同类库的Benchmark对比

libcopp很早就实现完成了v2版本,现在迁移进atsf4g-co/tree/sample_solution以后也把v2分支正式并入了主干。原来的版本切出到v...

793

扫码关注云+社区

领取腾讯云代金券