前言

微信支付的开发文档就是一坨屎!是人看的东西吗? 不是!小学毕业的语文水平都能写的比他好。

来吧,来一步步填坑

首先 名词认识(微信官翻就是@#%@#&*,懂了吗)

一.用到的数据说明

  • 商户证书(商户API证书):

官方解释:“商户证书”是指由商户申请的,包含商户的商户号、公司名称、公钥信息的证书。

新接入商户请参考什么是API证书?如何获取API证书?

我的解释:服务商在微信支付->账户中心->API安全->API证书中申请的证书,就是商户证书。其实也是在微信支付平台申请的,但是不叫微信平台证书(大概因为这个证书是由商户保管把,而微信只是提供了一个入口供我们去申请下载)我真的是很想教写文档的好好做人。

  • 商户API私钥

商户申请商户API证书时,会生成商户私钥,并保存在本地证书文件夹的文件apiclient_key.pem中。私钥也可以通过工具从商户的p12证书中导出。请妥善保管好你的商户私钥文件。

  • 商户API密钥
  • APIV3密钥
  • 平台证书:

官方解释:”平台证书”是指由微信支付负责申请的,包含微信支付平台标识、公钥信息的证书

微信支付提供的证书。平台证书只能通过调用“[获取平台证书接口]()“获取。

二.接入微信支付服务商版全流程

(这里只记录开发人员要做的事情,什么申请服务号,开通微信支付服务商这些忽略)

1.特约商户进件(最坑的一个接口)

1.1按照要求写好请求参数,其中主体信息中组织机构代码符合文档说明的可以不填写,虽然在申请单上看到的信息是缺失的,却不影响申请流程,不过如果你通过网页查看通过api接口申请的资料时,会发现主体信息那边提示去填写,点进去提示某些选项必填。这是网页申请和api申请的区别(api接口并没有提供三证合一的类型选择)。可忽略。

1.2.请求参数-经营资料-经营场景-小程序场景 中的appid对应服务商的小程序的appid,注意时服务商的小程序,不是服务商申请的第三方平台的appid也不是服务商的公众号的appid(提一下,服务商的公众号的appid是将来微信支付用的服务商appid。记住就行了,不用太纠结,否则微信的文档撰写者该拉去祭天了)。sup_appid是子商户的appid。两者填一个即可,填什么就申请什么的,并不是真的随便选一个填写。

1.3.结算规则

入驻结算规则ID与所属行业两个字段需要严格按照文档传入,如企业的传入716和“零售批发/生活娱乐/网上商城/其他” 一个字都不能少

商户在调用 API 时用自身的私钥签名,微信支付使用商户证书中的公钥来验签。微信支付在响应的报文中使用自身的私钥签名,商户使用平台证书中的公钥来验签。

1.4接下来就是如何发送http请求了。重点!!!

FAQ:

1.微信支付下单时最好订单号加上一个随机字符串。防止报错重复订单号(原因是同一个订单号请求微信下单,但是后来商品描述或者价钱变了,导致微信支付弹出然后用户取消再提交时提示错误,如果这些关键信息不变则可以重复吊起微信支付.其二:既要支持微信扫码支付和微信公众号支付,在微信公众号里发起了支付,但是没有支付,然后再到 PC 端发起扫码支付,这个时候又提示商户订单号重复了)

如何查看证书序列号?

登陆商户平台【API安全】->【API证书】->【查看证书】,可查看商户API证书序列号。

商户API证书和微信支付平台证书均可以使用第三方的证书解析工具,查看证书内容。或者使用openssl命令行工具查看证书序列号。

声明所使用的证书

某些情况下,将需要更新密钥对和证书。为了保证更换过程中不影响API的使用,请求和应答的HTTP头部中包括证书序列号,以声明签名或者加密所用的密钥对和证书。

  • 商户签名使用商户私钥,证书序列号包含在请求HTTP头部的Authorizationserial_no
  • 微信支付签名使用微信支付平台私钥,证书序列号包含在应答HTTP头部的Wechatpay-Serial
  • 商户上送敏感信息时使用微信支付平台公钥加密,证书序列号包含在请求HTTP头部的Wechatpay-Serial