参考官方文档

设计到的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;
} }

最新文章

  1. iOS XCode7制作.Framework动态库和.a静态库的总结
  2. django 有model生成SQL以及现有反向表生成model
  3. centos7
  4. oracle的加密和解密
  5. 【Bootstrap】2.作品展示站点
  6. Appium客户端
  7. js上下滚屏效果,代码通过测试
  8. Android滑动选择的日期选择框
  9. Git 10 周年之际,创始人 Linus Torvalds 访谈
  10. Hibernate4.1.4配置二级缓存EHCache步骤
  11. JAVA 函数式接口与c#委托对应关系(一)
  12. 最简单的基于FFmpeg的移动端例子:IOS 视频转码器
  13. setuptools,easy_install使用
  14. 实现BUG自动检测 - ASP.NET Core依赖注入
  15. setsockopt()和getsockopt()函数参数
  16. pig函数以及关键字 的一些实例应用的总结(来自pig笔记)
  17. 谷歌被爆秘密研发新系统 欲5年内取代Android
  18. jQuery自定义alert,confirm方法及样式
  19. SQL-7查找薪水涨幅超过15次的员工号emp_no以及其对应的涨幅次数t (group 与count)
  20. 剑指offer :跳台阶

热门文章

  1. sh 脚本重启/更新 Tomcat 项目
  2. springmvc 注解扫描失败的可能原因
  3. Mysql date, time, timestamp日期时间相关
  4. SpringBoot05 数据操作02 -&gt; JPA接口详解
  5. Action层, Service层 和 Dao层的功能区分
  6. session跨域共享
  7. HDOJ 1121 Complete the Sequence
  8. 一个ButtonDemo的实现过程。
  9. HTML5游戏开发 PDF扫描版​
  10. linux linux系统常用设置