Java之品优购课程讲义_day18(4)

品优购-微信支付二维码生成 
3.1 需求分析与实现思路 
3.1.1 需求分析 
在支付页面上生成支付二维码,并显示订单号和金额 
用户拿出手机,打开微信扫描页面上的二维码,然后在微信中完成支付 
Java之品优购课程讲义_day18(4)
实现思路 
我们通过 HttpClient 工具类实现对远程支付接口的调用。 
接口链接:https://api.mch.weixin.qq.com/pay/unifiedorder 
具体参数参见“统一下单”API, 构建参数发送给统一下单的 url ,返回的信息中有支付 url,
根据 url 生成二维码,显示的订单号和金额也在返回的信息中。 
后端代码实现 
3.2.1 服务接口层 
(1)在 pinyougou-pay-interface 创建包 com.pinyougou.pay.service ,包下建立接口

package com.pinyougou.pay.service; 
import java.util.Map; 
/**
 * 微信支付接口 
 * @author Administrator 
 *
 */
public interface WeixinPayService {

 /**
  * 生成微信支付二维码 
  * @param out_trade_no 订单号 
  * @param total_fee 金额(分)
  * @return
  */
 public Map createNative(String out_trade_no,String total_fee); 
}

服务实现层 
pinyougou-pay-service 创建 com.pinyougou.pay.service.impl 包,新建类

@Service 
public class WeixinPayServiceImpl implements WeixinPayService {

 @Value("${appid}")
 private String appid; 

 @Value("${partner}")
 private String partner; 

 @Value("${partnerkey}")
 private String partnerkey; 

 /**
  * 生成二维码 
  * @return
  */
 public Map createNative(String out_trade_no,String total_fee){
  //1.创建参数 
  Map<String,String> param=new HashMap();//创建参数 
  param.put("appid", appid);//公众号 
  param.put("mch_id", partner);//商户号
param.put("nonce_str", WXPayUtil.generateNonceStr());//随机字符串   
  param.put("body", "品优购");//商品描述 
  param.put("out_trade_no", out_trade_no);//商户订单号 
  param.put("total_fee",total_fee);//总金额(分) 
  param.put("spbill_create_ip", "127.0.0.1");//IP 
  param.put("notify_url", "http://test.itcast.cn");//回调地址(随便写)
  param.put("trade_type", "NATIVE");//交易类型 
  try {
   //2.生成要发送的 xml  
   String xmlParam = WXPayUtil.generateSignedXml(param, partnerkey); 
   System.out.println(xmlParam);  
   HttpClient client=new
HttpClient("https://api.mch.weixin.qq.com/pay/unifiedorder"); 
   client.setHttps(true); 
   client.setXmlParam(xmlParam); 
   client.post();   
   //3.获得结果  
   String result = client.getContent(); 
   System.out.println(result); 
   Map<String, String> resultMap = WXPayUtil.xmlToMap(result);    
   Map<String, String> map=new HashMap<>(); 
   map.put("code_url", resultMap.get("code_url"));//支付地址 
   map.put("total_fee", total_fee);//总金额 
   map.put("out_trade_no",out_trade_no);//订单号 
return map; 
  } catch (Exception e) {
   e.printStackTrace(); 
   return new HashMap<>(); 
  }   
 }
}

控制层 
pinyougou-cart-web 创建 PayController.java

/**
 * 支付控制层 
 * @author Administrator 
 *
 */
@RestController 
@RequestMapping("/pay")
public class PayController {
 @Reference 
 private  WeixinPayService weixinPayService; 

 /**
  * 生成二维码 
 * @return
  */
 @RequestMapping("/createNative")
 public Map createNative(){
  IdWorker idworker=new IdWorker();   
  return weixinPayService.createNative(idworker.nextId()+"","1");   
 }
}

这里我们订单号通过分布式 ID 生成器生成,金额暂时写死,后续开发我们再对接业务系统 得到订单号和金额 
浏览器测试 
Java之品优购课程讲义_day18(4)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值