微信支付接口开发go语言 微信支付接口代码( 四 )


return wxTicketService.payBack(resXml);
}catch (Exception e){
logger.error("微信支付回调通知失败",e);
String result = "";
return result;
}
}
@Override
public String payBack(String notifyData) {
logger.info("payBack() start, notifyData=https://www.04ip.com/post/{}", notifyData);
String xmlBack="";
MapnotifyMap = null;
try {
WXPay wxpay = new WXPay(iWxPayConfig);
notifyMap = WXPayUtil.xmlToMap(notifyData); // 转换成map
if (wxpay.isPayResultNotifySignatureValid(notifyMap)) {
// 签名正确
// 进行处理 。
// 注意特殊情况:订单已经退款,但收到了支付结果成功的通知,不应把商户侧订单状态从退款改成支付成功
String return_code = notifyMap.get("return_code");//状态
String out_trade_no = notifyMap.get("out_trade_no");//订单号
if (out_trade_no == null) {
logger.info("微信支付回调失败订单号: {}", notifyMap);
xmlBack = "";
return xmlBack;
}
// 业务逻辑处理 ****************************
logger.info("微信支付回调成功订单号: {}", notifyMap);
xmlBack = "";
return xmlBack;
} else {
logger.error("微信支付回调通知签名错误");
xmlBack = "";
return xmlBack;
}
} catch (Exception e) {
logger.error("微信支付回调通知失败",e);
xmlBack = "";
}
return xmlBack;
}
统一下单的签名和后续前端拉取微信支付的签名需要统一, 也就是都采用MD5加密, 如果2者不同, 会导致前端拉取微信支付fail, 这是一个巨大的坑, 因为这个原因调试了好久, 微信在文档里没有明确标出统一下单的签名校验方式 需要和前端拉取微信支付的签名校验保持一致.
微信sdk里的源码需要针对这个问题调整一下, 调整如下:
WXPay类需要修改下加密判断 , 在WXPay构造方法中,调整如下
public WXPay(final WXPayConfig config, final String notifyUrl, final boolean autoReport, final boolean useSandbox) throws Exception {
this.config = config;
this.notifyUrl = notifyUrl;
this.autoReport = autoReport;
this.useSandbox = useSandbox;
if (useSandbox) {
this.signType = SignType.MD5; // 沙箱环境
}
else {
this.signType = SignType.MD5; // 将这里的加密方式修改为SignType.MD5, 保持跟前端吊起微信加密方式保持一致
}
this.wxPayRequest = new WXPayRequest(config);
}
结束语
做完以后, 微信支付的后端逻辑还是很清晰的, 但是在开发过程中很煎熬, 不清楚每个专业术语在微信哪里配置, 加密方式乱的很
微信网页支付应该怎么调用微信接口1、申请微信支付 。
小程序认证以后,可以在小程序后台,微信支付菜单栏 , 申请微信支付 。
填写企业信息和对公账户,微信支付会打一笔随机金额到对公账户,输入金额完成验证后,在线签署迁移,即完成了微信支付的申请流程 。
微信支付申请完,会发送微信支付商户号,商户平台用户名密码等信息到注册者邮箱 。
2、配置小程序密钥 。
小程序后台设置页,点击生成 , 管理员验证二维码后,会随机生成AppSecret 。
请妥善保管好Appsecret,不要明文存储于服务器,AppSecret用于和微信服务器交互 。
比如获取用户的openid接口就需要用到.
3、设置密钥和下载证书
用申请微信支付获得的用户名和密码,登录商户平台(pay.weixin.qq),在账户中心,API安全中下载证书和设置密钥 。
密钥是32位 , 设置以后需要妥善保管,因为无法查看密钥,所有微信支付相关的接口都会使用这个密钥加密 。

推荐阅读