当前位置:主页 > 小程序开发 > API >

小程序发起微信支付接口wx.requestPayment(OBJECT)

栏目:API 来源: 微信小程序开发网 阅读: 2017-03-17
  当我们在开发微信小程序时,有时候有的小程序会用到在小程序里面进行微信支付操作,例如,微信小程序商城、或是通过小程序卖产品等都可能用到微信支持,如果在小程序里面开发微信支付,要微信支付首先要发起微信支付。

  因为,在小程序里面进行支付会员必须登录,所以,在这发起微信支付时,必须先用wx.login接口获取code,然后,通过code换取openid,有了openid了,就可以使用wx.request来获取发起支付的参数。

  如果发起支付成功,即调用success函数,那么,就可以在这个函里面进行处理,例如,开始支付等功能实现。

Object参数说明:

参数 类型 必填 说明
timeStamp String 时间戳从1970年1月1日00:00:00至今的秒数,即当前的时间
nonceStr String 随机字符串,长度为32个字符以下。
package String 统一下单接口返回的 prepay_id 参数值,提交格式如:prepay_id=*
signType String 签名算法,暂支持 MD5
paySign String 签名,具体签名方案参见微信公众号支付帮助文档;
success Function 接口调用成功的回调函数
fail Function 接口调用失败的回调函数
complete Function 接口调用结束的回调函数(调用成功、失败都会执行)

了解更多信息,请查看微信支付接口文档

回调结果:

回调类型 errMsg 说明
success requestPayment:ok 调用支付成功
fail requestPayment:fail cancel 用户取消支付
fail requestPayment:fail (detail message) 调用支付失败,其中 detail message 为后台返回的详细失败原因

示例:

const paymentUrl = require('../../../../config').paymentUrl

var app = getApp()

Page({
  onLoad: function() {
  },
  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
    app.getUserOpenId(function(err, openid) {
      if (!err) {
        wx.request({
          url: paymentUrl,
          data: {
            openid
          },
          method: 'POST',
          success: function(res) {
            console.log('unified order success, response is:', res)
            var payargs = res.data.payargs
            wx.requestPayment({
              timeStamp: payargs.timeStamp,
              nonceStr: payargs.nonceStr,
              package: payargs.package,
              signType: payargs.signType,
              paySign: payargs.paySign,
              'success': function (rs) {
              },
              'fail': function (rs) {
              }
            })

            self.setData({
              loading: false
            })
          }
        })
      } else {
        console.log('err:', err)
        self.setData({
          loading: false
        })
      }
    })
  }
})

  上面的wx.requestPayment接口里面的参数,就是使用wx.request获取到的对象,因为,没有实例的支付这里无法打印出这个对象来。