前言

最近企业网站做了个活动,用户在活动期间可以获得积分,积分可以兑换礼品现金红包提现到用户的微信钱包中,在参与开发这个功能时遇到的问题在这里记录下。

需要注意的地方

请求体

  1. 请求URL中的参数组装 需要把参数名ASCII字典序排序最后加上
    key={微信商户平台(pay.weixin.qq.com)->账户设置->API安全->密钥设置}
  2. 请求URL中的参数对应请求体内的XML参数都要有,编码要全部设置为 UTF-8
  3. 请求体内需要添加 apiclient_cert.p12 证书
  4. 最终返回结果 成功即为成功,失败需要以下几步操作:
    • 查询企业付款 来确认支付结果为失败还是转账中
    • 若为失败根据失败信息判断以原订单号重新发起请求还是以新的订单号发起请求

遇到的问题

SIGNERROR 签名错误

  • 请求时编码要是全部设置为 UTF-8;
  • key 传的不正确,key 和 app_id 一定要对的上,如果已经接入过微信支付,要确认这里的传的就是微信支付中用到的 key
  • 签名的参数和传递给微信的参数不匹配,一般是拼接参数不正确导致的,DEMO 中参数

已经配置好了,只要不修改参数的个数基本不会有问题;

NO_AUTH 此 IP 地址不允许调用接口

  • 新版本商户后台默认需要 IP 校验,有些人填 192.168.1.XXX 这种内网 IP 是不行的,可以
    访问 ip168 之类的网站获取自己的外网地址;在开发阶段也可以先关掉校验,方便本地调试;

OPENID_ERROR Openid 错误

  • app_id 和 openid 没对上导致的,比如公司同时开通了小程序和微信服务号,两个应用关
    联了同一个商户,极有可能就是用的小程序 app_id 作为参数,但是传的是微信服务号关联
    的 openid

注意项
Java需要用到:apiclient_cert.p12证书、证书秘钥、AppId、openId、商品号