首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的微信如何在微信小程序中进行支付?

我的微信如何在微信小程序中进行支付?
EN

Stack Overflow用户
提问于 2021-07-05 23:57:29
回答 1查看 41关注 0票数 0

微信的文档相当生硬,部分原因是错综复杂的授权管理方法。

EN

回答 1

Stack Overflow用户

发布于 2021-07-05 23:57:29

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

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

  1. 应用Id又称appid和应用密钥:您的应用提交审批后,即可在微信控制台获取。

  1. 商户Id又名mchid :在微信支付控制台提交企业帐号审批,并将您的小程序链接到您的微信支付账号后即可获取。

  1. A CA证书:微信支付现在使用的是CA颁发的证书,可以在微信支付控制台的应用安全中生成。它将自动附带您需要的apiclient_key.pem,以及您可以在控制台中找到的证书序列号。

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

现在您已经准备好开始了。为此,您需要一台服务器,因为只有在微信控制台注册的认证通过的HTTPS全限定域名,才能从小程序访问

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

  1. 现在,向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

  1. 此时,您应该将openId绑定到数据库中的某个内部id。

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

代码语言:javascript
复制
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.parse(JSON.stringify(rawData)))
const currentUnixTime = parseInt((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,您最终可以在您的微信应用程序中使用它。

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

  1. 使用wx.requestPayment即可完成设置。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68258984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档