了解支付模式
Native
适用场景:
Native支付是指商户系统按微信支付协议生成支付二维码,用户再用微信“扫一扫”完成支付的模式。该模式适用于PC网站、实体店单品或订单、媒体广告支付等场景。
解释:
- 这里描述一下PC端业务场景,例如:你在网站上购买东西,选择好商品后,会生成一个支付二维码,扫码支付后,商品的库存就减少了。 还有,自动贩卖机,选择商品后会生成支付二维码,扫码支付后,商品就会掉下来。
开发前准备
- 申请认证公众号 (若已有公众号则可跳过, 注意: 1. 公众号类型需要为服务号或者订阅号 2. 公众号需要认证, 认证费用300RMB)点此跳转申请公众号
- 申请网站备案 (若网站已备案则可跳过,注意:网站的备案内容需要和所出售商品直接关系)
- 有以上两个条件后可以开始申请开通微信支付,具体的申请流程公众号平台都有,读者可自行去查阅。
- 注意:1.开通微信支付需要公司账户打款验证,要及时和财务沟通好,查看公司流水。2.开通成功后,会收到邮件 ,邮件中的信息特别重要:示例如下
- 以上三条均申请完成即可开始配置开发环境。拿到邮件中的信息后,按照邮件中的指引配置好相关信息之后就可以开始开发了。
注意:很重要的几个信息,-
- API证书
-
- API密钥
-
- APPID
-
开发工具:本文采用的是idea,其他IDE开发工具均可
环境准备:
添加依赖
<!-- 添加微信支付jar包 -->
<dependency>
<groupId>com.github.wxpay</groupId>
<artifactId>wxpay-sdk</artifactId>
<version>0.0.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/dom4j/dom4j -->
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<!-- 二维码生成依赖 -->
<!-- 二维码 -->
<!-- https://mvnrepository.com/artifact/com.google.zxing/core -->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>2.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.zxing/javase -->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>2.1</version>
</dependency>
示例代码目录
支付:
/**
* 映射微信支付
*
* @param amount 金额(单位:分)
* @return
*/
@RequestMapping("/wxpay")
public void wxPay(Integer amount,HttpServletResponse response) throws Exception {
// 金额
Double total_fee = amount.doubleValue();
// 生成商家订单号
String orderId = PayUtil.createOrder();
if (total_fee > 0) {
WXPayService wxPayService = WXPayService.getInstance(certPath, notifyUrl);
String codeUrl = wxPayService.doUnifiedOrder(orderId, "收银台名称", total_fee, "产品id");
// ---------- 订单保存到数据库 ----------
// 这里写你自己的订单保存逻辑
// BizOrder bizOrder = new BizOrder();
// bizOrder.setAmount(amount);
// bizOrder.setAppid(PayConstant.APPID);
// bizOrder.setMacId(orderId);
// bizOrder.setTotalFee(String.valueOf(total_fee));
// bizOrder.setOrgId(Long.parseLong(orgId));
// BizOrder bo = bizOrderService.insertOrder(bizOrder);
// if (bo == null)
// throw new NullPointerException("Don't save order!");
// 生成支付二维码(数据流) 返回给前端页面
QRCodeUtil.createQrCodeStream(codeUrl,900,"JPEG",response);
}
}
- 支付业务
/**
* 微信支付业务
* Created by Jason on 2018/11/20.
*/
public class WXPayService {
private static Logger logger = LoggerFactory.getLogger