3.3 请求方法/** * Created On : 3/11/2022. * <p> * Author : huayu * <p> * Description: 微信支付接口对接测试入口 */@Slf4j@RestControllerpublic class WechatPagController {@Autowiredprivate WechatPayService wechatPayService;/*** @author : huayu* @date: 3/11/2022* @param: []* @return : com.kgc.scd.uitl.RequestResult<java.util.Map<java.lang.String,java.lang.String>>* @description : 请求微信统一下单接口,下单支付订单,返回支付链接*/@PostMapping("/wxpay/unifyOrder")public RequestResult<Map<String,String>> wechatPagUnifyOrder(@RequestParam String productBody,@RequestParam int totalFree) throws Exception {//调用业务接口,生成微信支付接口,统一下单的完整参数,xml格式(微信支付的接口要求,交互参数必须是xml)String unifyOrderXmlParams = wechatPayService.generateWxUnifyOrderXmlParams(productBody, totalFree);log.info("------ 1.请求微信支付统一下单参数:{} -------",unifyOrderXmlParams);//调用业务接口,请求微信支付统一下单接口,获取下单结果Map<String, String> unifyOrderMapResult = wechatPayService.getWchatPayUnifyOrderResult(unifyOrderXmlParams);log.info("------ 2.请求微信支付统一下订单接口返回:{} --------",unifyOrderMapResult);//定义当前接口返回的map集合Map<String, String> resultMap = new HashMap<>();//解析微信支付下单结果,如果下单成功,获取用户进行扫码支付的连接,返回给前端,生成二维码,if(WechatPayConstant.WECHAT_PAY_RESULT_SUCCESS.equals(unifyOrderMapResult.get("return_code"))&& WechatPayConstant.WECHAT_PAY_RESULT_SUCCESS.equals(unifyOrderMapResult.get("result_code"))){// 微信支付统一下单成功,省略签名校验// 获取成功的结果// 交易类型resultMap.put("trade_type", unifyOrderMapResult.get("trade_type"));// 预支付交易会话标识resultMap.put("prepay_id", unifyOrderMapResult.get("prepay_id"));// 二维码链接resultMap.put("code_url", unifyOrderMapResult.get("code_url"));// 返回统一下预支付单成功return ResultBuildUtil.success(resultMap);}// 统一下预支付单失败return ResultBuildUtil.fail(unifyOrderMapResult.get("return_code"), unifyOrderMapResult.get("return_msg"));}}
3.4 请求测试3.4.1 发送请求

文章插图
3.4.2 生成二维码

文章插图
4、接收用户支付成功后,微信异步回调支付结果
- 支付后,微信官方,通过回调地址,返回用户信息通过数据流 。
- 解析回调数据流 。
- 解析异步回调的支付结果 。
- 同步给微信官方响应结果 。
/*** @author : huayu* @date: 3/11/2022* @param: [wxpayNotifyXmlResult]* @return : java.lang.String* @description : 调用业务接口,解析异步回调的支付结果,并获取通知微信官方的结果*/String getNotifyWechatXmlResult(String wxpayNotifyXmlResult) throws Exception;
4.2 实现类@Overridepublic String getNotifyWechatXmlResult(String wxpayNotifyXmlResult) throws Exception {//将微信支付结果通知的xml格式字符串,转换位map集合,方便处理Map<String, String> wxpayNotifyXmlForMapResult = WechatPayUtil.generateXmlToMap(wxpayNotifyXmlResult);//解析回调结果if(WechatPayConstant.WECHAT_PAY_RESULT_SUCCESS.equals(wxpayNotifyXmlForMapResult.get("return_code"))){//官方提醒:商户系统对于支付结果通知的内容一定要做签名验证,并校验返回的订单金额是否与商户侧的订单金额一致,防止数据泄露导致出现“假通知”,造成资金损失 。if(WechatPayUtil.isSignatureValid(wxpayNotifyXmlForMapResult,wechatPayConfig.getMchKey())){// 签名校验成功,说明回调结果是可信的,就可以进行业务处理,如果签名失败,说明回调来源不可信,不能进行业务处理// TODO 真实业务中,收到正确回调,就要进行对应的业务处理,比如修改订单状态,发送主题消息,给定用户加积分,给物流生成物流单等等// 业务处理成功后,需要同步给微信响应结果-成功//成功return WechatPayConstant.WECHAT_PAY_NOTIFY_SUCCESS;}}// 同步给微信响应结果-失败returnWechatPayConstant.WECHAT_PAY_NOTIFY_FALL;}
经验总结扩展阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 2023年七月有什么节日 7月份有什么节日或特殊日子
- 7月半鬼节是几月几号 2023七月半是几月几日
- 7月半鬼节是几月几号 2023七月半是在几月几日
- 2023年农历七月半是几月几号 2023年7月半是什么时候
- cs七龙珠怎么加电脑人(cs七龙珠怎么用代码)
- oppoa97怎么设置微信分身 设置微信分身教程
- vivoT2x微信分身怎么弄 vivoT2x如何微信分身
- oppoa97微信怎么加密 怎么给微信上锁
- 2023年农历七月廿七宜结婚吗 2023年农历七月廿七结婚吉日
- 2023年9月11日提亲好吗 2023年农历七月廿七提亲吉日