小程序通过小程序云实现微信支付功能实例

yizhihongxing

小程序通过小程序云实现微信支付功能需要以下几个步骤:

  1. 注册并开通微信支付功能
    首先需要在微信支付开放平台注册账号,并按照微信支付文档的要求,完成商户信息的填写和资质证明的上传。然后开通微信支付功能,获取到商户ID(即mch_id)和API密钥(即api_key)等重要参数,这些参数后续会在小程序中用到。

  2. 在小程序中配置支付接口
    接下来需要在小程序管理后台中,进入“小程序云开发”界面,创建一个云函数,可以使用相应的脚手架工具——miniprogram-ci来初始化一个云函数的模板。然后修改index.js文件,编写支付接口的代码,并将商户ID和API密钥等参数填入其中。接着将支付接口通过云函数部署到小程序云端上,并在小程序的后台设置支付域名和支付证书。最后在小程序中使用wx.cloud.callFunction()方法调用云函数,实现支付功能。

以下是用JS示例代码实现支付接口部分:

const cloud = require('wx-server-sdk')
var request = require('request')
cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})
exports.main = async (event, context) => {
  try {
    var openid = event.userInfo.openId
    var total_fee = event.total_fee
    var body = event.body
    var spbill_create_ip = event.spbill_create_ip
    var nonce_str = Math.random().toString(36).substr(2, 15)
    var out_trade_no = Date.now().toString(36) + Math.random().toString(36).substr(3, 9)
    var notify_url = 'http://www.example.com/wxpay/notify'
    var mch_id = 'XXXXXXX'
    var partner_key = 'xxxxxxxxxxxxxxxxxxxxxx'

    //生成签名
    var signA = 'appid=wxXXXXXXXXXXXXXXXX&body=' + body + '&mch_id=' + mch_id + '&nonce_str=' + nonce_str + '&notify_url=' + notify_url + '&openid=' + openid + '&out_trade_no=' + out_trade_no + '&spbill_create_ip=' + spbill_create_ip + '&total_fee=' + total_fee + '&trade_type=JSAPI'
    var signB = signA + '&key=' + partner_key
    var md5 = require('md5')
    var sign = md5(signB).toUpperCase()

    //生成XML
    var dataXml = '<xml><appid>wxXXXXXXXXXXXXXXXX</appid><body>' + body + '</body><mch_id>' + mch_id + '</mch_id><nonce_str>' + nonce_str + '</nonce_str><notify_url>' + notify_url + '</notify_url><openid>' + openid + '</openid><out_trade_no>' + out_trade_no + '</out_trade_no><spbill_create_ip>' + spbill_create_ip + '</spbill_create_ip><total_fee>' + total_fee + '</total_fee><trade_type>JSAPI</trade_type><sign>' + sign + '</sign></xml>'

    //发送请求
    var options = {
      url: 'https://api.mch.weixin.qq.com/pay/unifiedorder',
      method: 'POST',
      headers: {
        'Content-Type': 'text/xml'
      },
      body: dataXml
    }
    return new Promise((resolve, reject) => {
      request(options, function (error, response, body) {
        if (!error && response.statusCode == 200) {
          var prepay_id = /<prepay_id><\!\[CDATA\[(.*)\]\]><\/prepay_id>/.exec(body)[1]
          var data = {
            'appId': 'wxXXXXXXXXXXXXXXXX',
            'timeStamp': parseInt(Date.now() / 1000).toString(),
            'nonceStr': Math.random().toString(36).substr(2, 15),
            'package': 'prepay_id=' + prepay_id,
            'signType': 'MD5'
          }
          var signA = 'appId=' + data['appId'] + '&nonceStr=' + data['nonceStr'] + '&package=' + data['package'] + '&signType=' + data['signType'] + '&timeStamp=' + data['timeStamp']
          var signB = signA + '&key=' + partner_key
          var paySign = md5(signB).toUpperCase()
          data['paySign'] = paySign
          resolve(data)
        } else {
          reject(error)
        }
      })
    })
  } catch (error) {
    console.log(error)
    return error
  }
}
  1. 在小程序中实现支付功能
    在小程序前端页面中,提供一个显示支付金额的按钮,当用户点击按钮时,调取支付接口获取到预支付订单信息(包括prepay_id、appId、timestamp、nonceStr、package和paySign),然后通过wx.requestPayment()方法将用户引导到微信支付中完成支付流程。

以下是用JS示例代码实现在前端页面上实现支付功能部分:

//在小程序前端页面中,定义以下按钮和方法
<view class="qf-wxPay" bindtap="wxPay">立即支付</view>
data: {
  orderList: [], // 存放用户订单信息的数组
  currentOrder: {} // 存放当前待支付订单的对象
},

wxPay: function(e) {
    var orderID = this.data.currentOrder.id
    var total_fee = this.data.currentOrder.price
    var body = '商品名'
    var spbill_create_ip = '127.0.0.1'
    wx.cloud.callFunction({
      name: 'pay',
      data: {
        body: body,
        total_fee: total_fee,
        spbill_create_ip: spbill_create_ip
      },
      success: res => {
        var payment = res.result
        wx.requestPayment({
          'timeStamp': payment.timeStamp,
          'nonceStr': payment.nonceStr,
          'package': payment.package,
          'signType': 'MD5',
          'paySign': payment.paySign,
          'success': function (res) {
            // 支付成功后执行的操作
          },
          'fail': function (res) {
            // 支付失败后执行的操作
          },
          'complete': function (res) {}
        })
      },
      fail: console.error
    })
  }

这样就实现了小程序通过小程序云实现微信支付功能的完整攻略。其中的示例代码可供参考实际项目。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:小程序通过小程序云实现微信支付功能实例 - Python技术站

(0)
上一篇 2023年5月30日
下一篇 2023年5月30日

相关文章

  • php微信公众号js-sdk开发应用

    下面是关于PHP微信公众号JS-SDK开发应用的完整攻略: 什么是JS-SDK JS-SDK 是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包。通过使用 JS-SDK,网页开发者可以轻松地在微信内嵌入即时通讯、地理位置定位等微信原生功能,为微信用户提供丰富的网页应用体验。 开发步骤 1. 配置开发环境 首先需要注册微信公众平台账号,并在开发者中心…

    PHP 2023年5月27日
    00
  • PHP常用的文件操作函数总结

    下面我来详细讲解一下“PHP常用的文件操作函数总结”的攻略。 目录 文件操作函数 文件夹操作函数 文件读写函数 示例说明 文件操作函数 在 PHP 中,有三个常用的文件操作函数,分别是 fopen()、fclose()、fwrite()。其中,fopen() 用于打开一个文件,fclose() 用于关闭打开的文件,fwrite() 用于向文件中写入数据。 使…

    PHP 2023年5月26日
    00
  • 微信小程序实现聊天室

    完整攻略:微信小程序实现聊天室 作为一种基于微信生态的应用开发方式,微信小程序已经被越来越多的开发者所使用。而其中,实现聊天室类型的应用更是相对热门的开发需求。本文基于微信开发者工具的环境,讲解如何使用小程序实现聊天室应用。 前置条件 在开始实现聊天室前,我们需要创建一个小程序项目并在微信开发者工具中打开。具体对应流程如下: 打开微信开发者工具,选择创建项目…

    PHP 2023年5月23日
    00
  • 二招解决php乱码问题

    针对“二招解决php乱码问题”,我将分步骤对其进行详细讲解。 一、问题背景 在使用 PHP 进行开发时, 经常会出现乱码情况。乱码的产生原因有很多,比如编码不一致、数据传输格式不正确等。 二、解决方法一:设置编码格式 1. 设置HTML网页的编码格式 在网页中添加如下代码: <meta charset="utf-8" /> 其…

    PHP 2023年5月23日
    00
  • php截取中文字符串函数实例

    PHP截取中文字符串函数实例 在PHP中,截取中文字符串与截取英文字符串不同,因为中文占用的字节数不同,所以我们需要针对中文字符进行截取。下面是一些可用的方法。 方法一:substr和mb_substr函数 substr和mb_substr函数都可以用于截取字符串,但是substr函数对于截取含有中文字符的字符串经常会出现乱码问题,而mb_substr函数在…

    PHP 2023年5月26日
    00
  • PHP如何防止用户重复提交表单

    防止用户重复提交表单是一个比较常见的问题。下面,我提供一份针对 PHP 的防重复提交表单的攻略。 一、使用 Token 防止 CSRF 攻击 在 Web 应用中,CSRF(跨站点请求伪造)攻击是一个常见威胁。一般情况下,CSRF 攻击需要重复提交表单才能达到目的。因此,防重复提交表单也可以帮助防止 CSRF 攻击。 其中一个防止 CSRF 攻击的技术是利用 …

    PHP 2023年5月27日
    00
  • php中return的用法实例分析

    下面就是关于“php中return的用法实例分析”的详细讲解攻略。 什么是return 在 PHP 中,return 是用于从函数中返回值的关键字。当执行 return 时,它立即结束当前函数的执行,并返回一个值。在很多编程语言中,return 的用途相似。return 可以返回任意类型的值,可以是整数、浮点、字符、数组、对象等。 返回值的用途 return…

    PHP 2023年5月26日
    00
  • PHP include任意文件或URL介绍

    PHP中的include函数可以用于将一个文件中的内容插入到另一个文件中,这其中可以包含任意文件或URL。这种方式在开发web应用程序时非常常见,可以帮助我们重用代码,提高代码的可维护性。不过,如果使用不当,恶意用户可能会利用该功能从而执行任意代码,危及系统安全。因此,在使用此功能时,应该非常小心,严格限制可被包含的文件,并且不要直接将外部输入用作inclu…

    PHP 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部