微信支付宝支付经验以及相关坑

2019-01-25  本文已影响0人  陈兄
image

简介

此片文章介绍对接微信、支付宝所遇到的问题以及经验之谈。

准备工作

支付类型 |文档 |对接难易程度 |文档地址
--|---
支付宝 | 文档写的不错 | 易 | https://docs.open.alipay.com/api_1/alipay.trade.fastpay.refund.query
微信 | 不想说了 | 难(也不能说难应该是坑)|https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_1

熟悉支付流程

支付宝

image

[详情文档请参考]

微信

image
[详情文档请参考]

有萝卜有坑

序号 | 类型 |问题描述
--|---
No1 | 支付宝 | 支付宝秘钥使用pkcs8加密方式,以及相关参数key配置。
No2 | 微信 | 微信key值一定要使用微信支付的key,不要用平台key。
No3 | 微信 | 一直报签名错误,下面详细介绍。
No4 | 微信 | 得到的签名一定要转MD5,然后在将其转换成大写,并且生成MD5必须要以UTF-8的方式。
No5 | 微信 | 订单金额需要转换成以分为单位。
No6 | 微信 | 且值为空的参数不参与签名。
No7 | 微信 | 参数需按ASCII码从小到大排序。
No8 | 微信 | 第二次签名认证参数已消息的格式。
No9 | 微信 | 第二次签名参数package,需要赋值Sign=WXPay

一句签名错误概括全部错误信息,我就弱弱的问句错误码有用么?

“验证签名错误”第一反应肯定是检测签名是否正确,[官方验证签名地址]
然而,这才刚刚开始,签名正确了还是特么的报“验证签名错误”。特么的把以上几点全部检测了“有萝卜有坑”,然并卵。上面说了<span style="color:red">签名验证有两次,这是第二次验证错误</span>,最后发现<span style="color:red">【传入微信端的时间戳参数 ios需要32位 安卓需要10位】</span>,笑哭。首先看见“验证签名错误”,肯定是服务端问题,然而呢。。。

签名两次重要参数

第一次签名参数

得到sign并赋值pay.setSign(sign) ;接下来就是将pay对象转换成xml,调用统一下单接口进行统一支付,并将统一支付返回的xml转换成bean。

  notify_url //回调地址
  time_start //交易起始时间
  time_expire //交易结束时间
  spbill_create_ip //IP地址
  trade_type //交易类型
  limit_pay //no_credit--指定不能使用信用卡支付
  appid //微信开放平台审核通过的应用APPID
  mch_id //微信支付分配的商户号
  nonce_str //随机字符串,不长于32位。
  sign_type //签名类型,目前支持HMAC-SHA256和MD5,默认为MD5
  body //商品描述交易字段格式根据不同的应用场景按照以下格式:APP——需传入应用市场上的APP名字-实际商品名称,天天爱消除-游戏充值。
  out_trade_no //订单号
  total_fee //交易金额默认为人民币交易,接口中参数支付金额单位为【分】,参数值不能带小数。
  sign //根据以上数据生成签名

第二次签名参数

统一下单成功会返回微信预支付订单号prepay_id,我们需要根据这个prepay_id进行二次签名,二次签名所用参数如下(不包括paySign)。

  noncestr //随机字符串
  appid //微信开放平台审核通过的应用APPID
  timestamp //就是这B,传入微信端的时间戳参数 ios需要32位 安卓需要10位
  partnerid //商户号
  package //Sign=WXPay
  prepayid //微信预支付订单号prepay_id
  sign //根据以上数据生成签名

实例代码后续上传GitHub

第三方文档能不能写专业第一,之前和中兴、华为对接一样,特么的文档写的一塌糊涂。

上一篇下一篇

猜你喜欢

热点阅读