微信扫码支付回调处理

文章讲述了Java开发者如何处理微信支付的回调通知,包括XML字符串转换成Map集合,验证回调结果,更新商户订单状态,并提及了与面试题相关的技术点如JVM、数据库等。
摘要由CSDN通过智能技术生成

inputStream.close();

//2、将xml格式字符串格式转为map集合

Map<String, String> callbackMap = WXPayUtil.xmlToMap(sb.toString());

//{transaction_id=4200000406201910302624423717, nonce_str=2I7gxX84Xs7i7Wg1qFdBuSLKYiAaPzq4, bank_type=CFT,

// openid=oAmW11HX2ghkmdIVol2l6NEHhRHY, sign=8BA2949611A06D0F4C58992A2F357DAB, fee_type=CNY, mch_id=1557130741,

// cash_fee=1, out_trade_no=P2019103031189489360957272065, appid=wx551f77763ebda8a2, total_fee=1, trade_type=NATIVE,

// result_code=SUCCESS, time_end=20191030183017, is_subscribe=N, return_code=SUCCESS}

log.info(“接收到的微信支付回调结果为:{}”, callbackMap);

payOrderService.supplierRechargeWXPayNotify(callbackMap,response);

}

3.处理具体相关业务并通知微信处理结果


/**

  • 微信供应商充值的异步回调通知

  • //{transaction_id=4200000406201910302624423717, nonce_str=2I7gxX84Xs7i7Wg1qFdBuSLKYiAaPzq4, bank_type=CFT,

  • // openid=oAmW11HX2ghkmdIVol2l6NEHhRHY, sign=8BA2949611A06D0F4C58992A2F357DAB, fee_type=CNY, mch_id=1557130741,

  • // cash_fee=1, out_trade_no=P2019103031189489360957272065, appid=wx551f77763ebda8a2, total_fee=1, trade_type=NATIVE,

  • // result_code=SUCCESS, time_end=20191030183017, is_subscribe=N, return_code=SUCCESS}

  • @param callbackMap

  • @param response

  • @return

*/

@Override

public void supplierRechargeWXPayNotify(Map<String, String> callbackMap, HttpServletResponse response) throws Exception {

if (“SUCCESS”.equals(callbackMap.get(“result_code”))) {

//获取商户订单号

//商户系统内部订单号,要求32个字符内,只能是数字、大小写字母_-|* 且在同一个商户号下唯一

//3、判断回调信息是否成功

String outTradeNo = callbackMap.get(“out_trade_no”);

System.out.println(outTradeNo);

//6、数据库查找订单,如果存在则根据订单号更新该订单

TbCharge entity = new TbCharge();

entity.setChargeId(outTradeNo);

TbCharge tbCharge = tbChargeMapper.selectOne(entity);

//判断充值订单中的状态和付款类型

if (tbCharge != null && tbCharge.getChargeStatus() == 0 && tbCharge.getType() == 1) {

String totalFee = callbackMap.get(“total_fee”);

double fen = Double.parseDouble(totalFee);

double v = fen / 100;

if (v != tbCharge.getAmount().doubleValue()) {

log.error(“微信支付成功后的回调金额与充值金额不一致”);

throw new RrkException(“微信支付成功后的回调金额与充值金额不一致”);

} else {

try {

tbCharge.setRemark(callbackMap.get(“openid”));

tbCharge.setUpdateTime(System.currentTimeMillis());

tbCharge.setPayTime(System.currentTimeMillis());

//修改支付状态,之前生成的订单支付状态是未支付,这里表面已经支付成功的订单

tbCharge.setChargeStatus(1);

//根据商户订单号更新订单

Integer integer = tbChargeMapper.updateById(tbCharge);

log.error(“微信支付成功后的回调处理结果为integer={}”, integer);

//7、通知微信订单处理成功

if (integer > 0) {

response.setContentType(“text/xml”);

response.getWriter().println(“success”);

return;

}

} catch (Exception e) {

log.error(“更新供应商微信充值状态失败,原因是:” + e.getMessage());

throw new RrkException(“更新供应商微信充值状态失败”);

}

}

}

}
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

分享一些系统的面试题,大家可以拿去刷一刷,准备面试涨薪。

这些面试题相对应的技术点:

  • JVM
  • MySQL
  • Mybatis
  • MongoDB
  • Redis
  • Spring
  • Spring boot
  • Spring cloud
  • Kafka
  • RabbitMQ
  • Nginx

大类就是:

  • Java基础
  • 数据结构与算法
  • 并发编程
  • 数据库
  • 设计模式
  • 微服务
  • 消息中间件

程序员,每个月给你发多少工资,你才会想老板想的事?

程序员,每个月给你发多少工资,你才会想老板想的事?

程序员,每个月给你发多少工资,你才会想老板想的事?

程序员,每个月给你发多少工资,你才会想老板想的事?

程序员,每个月给你发多少工资,你才会想老板想的事?

程序员,每个月给你发多少工资,你才会想老板想的事?

程序员,每个月给你发多少工资,你才会想老板想的事?

程序员,每个月给你发多少工资,你才会想老板想的事?

程序员,每个月给你发多少工资,你才会想老板想的事?
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

[外链图片转存中…(img-Ju5hw41d-1713681645987)]

[外链图片转存中…(img-Zwu31hAR-1713681645987)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 24
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PHP微信扫码支付Demo是一个用PHP语言编写的示例程序,用于演示如何使用微信支付扫码支付功能。 首先,我们需要在微信商户平台注册一个商户号,并获取到支付相关的参数,包括APPID、商户号、密钥等等。 然后,我们需要搭建一个简单的PHP后台服务器,用于处理支付请求和回调。我们可以使用框架如Laravel或使用原生PHP来实现。 接下来,我们需要创建一个简单的页面,提供给用户进行支付。页面上需要包含一个二维码来展示支付链接。 在PHP代码中,我们需要首先获取到用户在前端输入的支付金额和订单号等信息。然后,通过调用微信支付接口的方式,生成一个微信支付的二维码链接。我们可以使用PHP内置的cURL库来发送请求,并获取到返回的结果。 接下来,我们将支付链接生成的二维码显示在前端页面上,供用户进行扫码支付。我们可以使用一些开源的PHP二维码生成库来生成二维码图片。 当用户扫码支付后,微信服务器会回调我们之前在后台配置的回调URL。我们需要编写相应的代码来处理这个回调请求,并验证回调的合法性。在回调处理中,我们需要根据微信服务器返回的支付结果更新订单状态或进行其他业务逻辑的处理。 最后,我们可以在前端页面上添加一些样式和交互效果,例如显示支付成功或失败的提示信息,并提供订单查询的功能。 通过以上步骤,我们就可以实现一个简单的PHP微信扫码支付Demo。当然,这只是个简单的示例,实际应用中还需要考虑更多的安全性和异常处理等问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值