APP微信支付实现
2024-08-28 21:54:26
参考官方文档
设计到的API: 统一下单API、支付结果通知API和查询订单API
下面代码是请求预支付ID
// 构建下单bean
final WxPayUnifiedOrderBean unifiedOrderBean = new WxPayUnifiedOrderBean();
unifiedOrderBean.setAppid(wxPayConfig.getAppId());
unifiedOrderBean.setMch_id(wxPayConfig.getMchId());
unifiedOrderBean.setNonce_str(this.getNonceStr(16));
unifiedOrderBean.setBody("支付");
unifiedOrderBean.setOut_trade_no(order.getHubOrderNo());
unifiedOrderBean.setTotal_fee(order.getTotalFee());
unifiedOrderBean.setSpbill_create_ip(order.getSpbill_create_ip());
unifiedOrderBean.setNotify_url(this.paymentProperties.getWeixin().getNotify_url());
unifiedOrderBean.setSign(this.generateSignForPrePayId(unifiedOrderBean, wxPayConfig.getSecret())); // 请求统一下单接口
final WxPayPrePayBean bean = this.requestWx(unifiedOrderBean); /**
* 请求统一下单接口
*
* @param unifiedOrderBean
* @return
*/
private WxPayPrePayBean requestWx(final WxPayUnifiedOrderBean unifiedOrderBean) { final XStream xStream = new XStream(new DomDriver("UTF-8", new NoNameCoder()));
xStream.autodetectAnnotations(true);
final String postXml = xStream.toXML(unifiedOrderBean); // 发送请求
final HttpHeaders headers = new HttpHeaders();
final MediaType type = MediaType.parseMediaType("application/x-www-form-urlencoded; charset=UTF-8");
headers.setContentType(type);
final HttpEntity<String> requestEntity = new HttpEntity<>(postXml, headers); final RestTemplate restTemplate = new RestTemplate();
final ResponseEntity<String> responseEntity = restTemplate.postForEntity(
PaymentConstant.WX_PREPARE_ORDER_URL, requestEntity, String.class); // 解析请求结果
final XStream xStreamResult = new XStream(new DomDriver("UTF-8", new NoNameCoder()));
xStreamResult.processAnnotations(WxPayPrePayBean.class);
try {
final String returnStr = new String(responseEntity.getBody().getBytes("ISO-8859-1"), "UTF-8"); System.out.println(responseEntity.getBody());
System.out.println(returnStr);
final WxPayPrePayBean bean = (WxPayPrePayBean) xStreamResult.fromXML(returnStr);
return bean;
} catch (final Exception e) {
e.printStackTrace();
return null;
} }
最新文章
- iOS XCode7制作.Framework动态库和.a静态库的总结
- django 有model生成SQL以及现有反向表生成model
- centos7
- oracle的加密和解密
- 【Bootstrap】2.作品展示站点
- Appium客户端
- js上下滚屏效果,代码通过测试
- Android滑动选择的日期选择框
- Git 10 周年之际,创始人 Linus Torvalds 访谈
- Hibernate4.1.4配置二级缓存EHCache步骤
- JAVA 函数式接口与c#委托对应关系(一)
- 最简单的基于FFmpeg的移动端例子:IOS 视频转码器
- setuptools,easy_install使用
- 实现BUG自动检测 - ASP.NET Core依赖注入
- setsockopt()和getsockopt()函数参数
- pig函数以及关键字 的一些实例应用的总结(来自pig笔记)
- 谷歌被爆秘密研发新系统 欲5年内取代Android
- jQuery自定义alert,confirm方法及样式
- SQL-7查找薪水涨幅超过15次的员工号emp_no以及其对应的涨幅次数t (group 与count)
- 剑指offer :跳台阶