微信支付文档地址:https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_4_1.shtml
微信支付SDK地址:https://github.com/wechatpay-apiv3/wechatpay-java
一、开通支付产品、获取相关配置参数
参数 | 参数描述 |
---|---|
appid | 公众账号ID(可以在开放平台查看,一般是wx开头) |
mch_id | 商户号(可以在商户平台查看) |
key | 商户APIV3密钥 (可以在商户平台查看设置) |
merchant_serial_number | 商户证书序列号 (可以在商户平台查看设置) |
二、
1、加入依赖
<dependency>
<groupId>com.github.wechatpay-apiv3</groupId>
<artifactId>wechatpay-java</artifactId>
<version>0.2.9</version>
</dependency>
2、微信支付配置参数
/**
* @ClassName: WxPayConfig
* @Description: 微信支付配置参数
* @Version 1.0
*/
public final class WxPayConfig {
// 应用ID
public final static String appId = "wx*********";
// 商户ID
public final static String mchId = "1*********";
// 回调地址
public final static String notifyUrl = "http://***.com/pay/notify";
/** 商户API私钥文件路径 */
public final static String privateKeyPath = "apiclient_key.pem";
/** 商户证书序列号 */
public final static String merchantSerialNumber = "******";
/** 商户APIV3密钥 */
public final static String apiV3key = "******";
}
3、微信支付Controller类
@Controller
@RequestMapping("/pay")
public class PayController {
@Autowired
private WxPayService wxPayService;
/**
* 微信支付 native
*/
@RequestMapping(value = "/createOrder", method = RequestMethod.GET)
@ResponseBody
public String createOrder() {
// 订单号
String out_trade_no= "123456789";
// 支付金额,单位分
Integer money = 100;
Map result = wxPayService.nativePayV3(out_trade_no, money);
String code_url = (String) result.get("code_url");
return code_url;
}
}
4、微信支付服务类
public interface WxPayService {
Map<String, String> nativePayV3(String out_trade_no, Integer money);
}
@Service
public class WxPayServiceImpl implements WxPayService {
@Override
public Map<String, String> nativePayV3(String out_trade_no, Integer money) {
Config config = new RSAAutoCertificateConfig.Builder()
.merchantId(WxPayConfig.mchId)
.privateKeyFromPath(WxPayConfig.privateKeyPath)
.merchantSerialNumber(WxPayConfig.merchantSerialNumber)
.apiV3Key(WxPayConfig.apiV3key)
.build();
NativePayService service = new NativePayService.Builder().config(config).build();
PrepayRequest request = new PrepayRequest();
Amount amount = new Amount();
amount.setTotal(money);
request.setAmount(amount);
request.setAppid(WxPayConfig.appId);
request.setMchid(WxPayConfig.mchId);
request.setDescription("测试商品");
request.setNotifyUrl(WxPayConfig.notifyUrl);
request.setOutTradeNo(out_trade_no);
PrepayResponse response = service.prepay(request);
Map<String, String> payParameters = new HashMap<>();
payParameters.put("code_url", response.getCodeUrl());
return payParameters;
}
}
根据返回的code_url,生成二维码;扫描二维码即可支付。