黄虎

微信支付集成

黄虎Lv.3修习明道云员工 发布于 最后回复 集成
19 回复5736 浏览
产品介绍 微信支付 ( https://pay.weixin.qq.com )是腾讯集团旗下中国领先的第三方支付平台,一直致力于为用户和企业提供安全、便捷、专业的在线支付服务。以“微信支付,不止支付”为核心理念,为个人用户创造了多种便民服务和应用场景,为各类企业以及小微商户提供专业的收款能力,运营能力,资金结算解决方案,以及安全保障。企业、商品、门店、用户已经通过微信连在了一起,让智慧生活,变成了现实。 微信支付官网 : https://pay.weixin.qq.com/ API 接口文档 : https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_7_0.shtml 如何对接微信支付? 前导 微信支付目前暂时仅支持 Native 支付,请用户选择该支付接入方式。接入条件如下:服务器、域名(网站)、微信支付企业认证、公众号或服务号企业认证,具体情况可查看微信支付官方文档: https://pay.weixin.qq.com/ [图片] 1.跳转访问 API 接口文档中的接入指引: https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_7_1.shtml 。注:对接微信支付的模式我们是选择直连模式。 [图片] 2.并且需要接入微信前需要提前准备好 APPID 和 mchid(商户 ID),以及将 APPID 和 mchid 进行绑定。绑定完成后将 APPID 和 mchid 复制填入连接参数中。 [图片] [图片] 3.配置 API key(选择 API v3)。此步骤中的 API v3 密钥会在后续中的支付通知回调中用作 AES 解密。(请将这里的密钥信息保管好) [图片] 4.下载并配置商户证书。未申请证书的用户请先申请,申请完成后需要将 apiclient_key.pem 文件打开,并将内容全选复制填入连接参数的 apiclient_key 中。 [图片] [图片] 5.最后将 API 证书管理中的证书序列号的内容填入连接参数中。 [图片] 如何使用微信支付? 1.在工作表中按照图片的描述进行配置,且需要创建一个 webhook 工作流将地址填入接口参数中。 注:微信支付的 Native 下单接口的支付金额单位是分。 [图片] [图片] 2.生成二维码 [图片] 3.用户手机扫码后,在确认支付前需要到生成异步通知的工作流中,勾选上“ 生成 Body 全文参数 ”,随后立刻支付即可获取到异步通知消息。 [图片] [图片] ## 微信支付异步通知解密 1.在前面提到了若用户扫码支付成功后,商家后台会收到一条异步消息通知。但实际查看内容时会发现参数都是经过微信加密处理的。那么此时需要对加密内容进行解密则需要将对接步骤中我们提到的 API v3 密钥准备好。 2.我们需要 webhook 工作流中添加一个代码块,并配置上我们在前面勾选上的“ 生成 body 全文参数 ”,并将 API v3 密钥填入到 aes_key 中。 [图片] #python代码示例 from cryptography.hazmat.backends import default_backend from cryptography.hazmat.primitives.ciphers.aead import AESGCM import base64 import json # 微信支付消息通知AES解密 def aes_decrypt ( key , associated_data , nonce , ciphertext ): if len ( key ) != 32 : raise ValueError ( "无效的ApiV3Key,长度必须为32个字节" ) try : aesgcm = AESGCM ( key ) decrypted_data = aesgcm . decrypt ( nonce , ciphertext , associated_data . encode ( 'utf-8' )) return decrypted_data . decode ( 'utf-8' ) except ValueError as val : raise ValueError ( "解密失败:" + str ( val )) # 解密参数 # API3密钥 api_key = input [ 'aes_key' ] . encode ( 'utf-8' ) # 替换为你的32字节API密钥 # 解密JSON encrypt_json = json . loads ( input [ 'encrypt_content' ]) # 加密文本 ciphertext = encrypt_json . get ( 'resource' ) . get ( 'ciphertext' ) # 关联数据 associated_data = encrypt_json . get ( 'resource' ) . get ( 'associated_data' ) # 随机数 nonce = encrypt_json . get ( 'resource' ) . get ( 'nonce' ) . encode ( 'utf-8' ) #解密内容 decrypted_text = aes_decrypt ( api_key , associated_data , nonce , base64 . b64decode ( ciphertext )) output = { 'decrypted_text' : decrypted_text } 3.在点击测试前,将我们拿到的生成 body 全文参数的值复制填入到我们的 encrypt_content。点击测试后即可查看解密后的结果。商家只需要重新生成一个订单即可验证查看解密内容了。 [图片]