开发微商城小程序:微信如何在微信小程序中进行支付

微信文档非常迟钝,部分原因是管理授权的复杂方法。

0

这个答案是针对小程序的。使用中文版本的文档,英文版本已经过时。

首先,您需要准备以下信息。请注意,涉及两个控制台:微信和微信支付。这些准备工作将需要几天的时间来处理,因此请在开始开发支付功能之前获取它们。

App Id aka appid 和 App Secret:您可以在微信控制台中提交应用程序以供批准后获得它。

Merchant Id aka mchid:您可以在微信支付控制台中提交商业帐户的批准后,以及将小程序链接到微信支付帐户后获得它。

CA 证书:微信支付现在使用 CA 颁发的证书,该证书可以从微信支付控制台的 App Security 中生成。它会自动附带您需要的apiclient_key.pem,以及您可以在控制台中找到的证书序列号。

微信和微信支付控制台上分配 HTTPS 完全限定域名。微信支付控制台。有一个相当奇怪的行为,它会提示您进行短信验证,但之后您需要重复提示您输入短信的操作。

现在您可以开始了。您将需要一个服务器,因为只有经过验证和批准的已在微信控制台中注册的 HTTPS 完全合格的域名才能从小程序访问

wx.login获取临时代码。如果再次调用wx.login,此代码过期,因此请使用wx.checkSession检查会话是否有效,然后再继续。

现在,向https://api.weixin.qq.com/sns/jscode2session?appid=${appid}&secret=${appsecret}&js_code=${code}&grant_type=authorization_code(https://developers.weixin.qq.com/miniprogram/en/dev/api-backend/open-api/login/auth.code2Session.html) 发出 GET 请求。这将返回访问其他项目所需的openId

此时,您应该将 openId 绑定到数据库中的一些内部 ID。

现在您需要创建一个交易会话。这是相当复杂的 (https://pay.weixin.qq.com/wiki/doc/apiv3/a/chapter3_5_1.shtmlhttps://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay4_0.shtml)。这需要 Weixin 的自定义授权方案。如果您使用的是 NodeJS,它看起来如下:

const { v4: uuidv4 } = require('uuid')
var crypto = require('crypto')
var fs = require('fs')
const pem = fs.readFileSync('./certs/apiclient_key.pem')
const key = pem.toString('ascii')
let minifiedRawData = JSON.stringify(JSON.p(JSON.stringify(rawData)))
const currentUnixTime = pInt((new Date().getTime() / 1000).toFixed(0))
const randomString = uuidv4()
// weixin uses a CA authorised certificate but uses a custom authorisation scheme.
let sign = crypto.createSign('RSA-SHA256')
sign.update(
  `POST\n/v3/pay/transactions/jsapi\n${currentUnixTime}\n${randomString}\n${minifiedRawData}\n`
)
const token = sign.sign(key, 'base64')
const r = await axios.post(
  `https://api.mch.weixin.qq.com/v3/pay/transactions/jsapi`,
  rawData,
  {
    headers: {
      Authorization: `WECHATPAY2-SHA256-RSA2048 mchid="${mchid}",nonce_str="${randomString}",signature="${token}",timestamp="${currentUnixTime}",serial_no="${certSerialNumber}"`
    }
  }
)

请注意,所有错误消息均为中文。这将为您提供prepay_id,您最终可以在微信应用程序中使用它。

https://developers.weixin.qq.com/miniprogram/en/dev/api/open-api/payment/wx.requestPayment.html是错误的。不要使用这个。这已经过时了。改用https://pay.weixin.qq.com/wiki/doc/apiv3/a/chapter3_5_4.shtml。使用您在 4 中创建的相同算法。生成签名。您需要将 randomString 、 timestamp 、 signature 和 prepay_id 发送到前端,以便它使用小程序发出请求。

使用 wx.requestPayment 和你设置。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(991)
Python怎么用:pythonipow:如何使用第三个参数
上一篇
Creo工程图第一视角永久更改:PythonPDF解析器-工程图
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(25条)