微信小程序退款遇到的坑及总结
在我做完微信支付并且成功上线运行之后,接到了领导给我的这个微信退款,当时心里那个傲娇(这有啥难的)虽然也是第一次接触,自以为自己写过了支付就退款没啥问题,都一样,结果,杯具了,按照之前写的那一套全部否定, 直接懵逼。。。
在这里说一下,也再次给我自己提个醒,微信的支付是你给微信钱,怎么简单怎么来,一不要证书,二好多东西都可以直接用他们的sdk去做。但是退款不一样,他需要你从微信拿钱,那能好拿吗,需要用到退款的apk证书,而且而且重点强调她这里的官方sdk在退款是不能用的,全部都是需要自己重新写的,谨记!!!
直接上代码吧,看的更明白点
首先跟支付一样需要你的参数配置
public class WxPayConfigurationInfo implements WXPayConfig {
/**微信号商户号*/
private String mchID ;
/**appID*/
private String appID;
/** API 密钥 */
private String key;
/** API证书绝对路径 */
private String certPath;
/** 退款异步通知地址 */
private String refundNotifyUrl;
@Override
public InputStream getCertStream() {
File certFile = new File(certPath);
InputStream inputStream = null;
try {
inputStream = new FileInputStream(certFile);
} catch (FileNotFoundException e) {
}
return inputStream;
}
}
签名
严格按照微信官方的签名算法来做签名,首先把你要用来做签名的参数字段做ASCII排序。然后对组装的参数进行加密
//退款签名
//退款的签名不能用官方的SDK,需要自己去写
public String sign(String nonceStr,String incrementId,String orderIncrementId,String refund_desc,Integer amount,Integer rechargeAmount,String transationId){
//首先需要所有的验签参数按ASCII码排序
SortedMap<String, String> signData = new TreeMap<>();
//小程序ID
signData.put("appid", config.getAppID());
//商户号
signData.put("mch_id", config.getMchID());
//随机字符串
signD