1、 导入jar
<dependency>
<groupId>cn.springboot</groupId>
<artifactId>best-pay-sdk</artifactId>
<version>1.3.0.BETA</version>
</dependency>
2、微信支付基本配置
@Component
public class PayConfig {
@Bean
public BestPayServiceImpl bestPayService(){
BestPayServiceImpl bestPayService = new BestPayServiceImpl();
bestPayService.setWxPayConfig(wxPayConfig());
return bestPayService;
}
@Bean
public WxPayConfig wxPayConfig(){
WxPayConfig wxPayConfig = new WxPayConfig();
wxPayConfig.setAppId(WeChatResources.APPID);
wxPayConfig.setAppSecret(WeChatResources.APPSECRET);
// 商户号
wxPayConfig.setMchId(WeChatResources.PAYID);
// 商户秘钥
wxPayConfig.setMchKey(WeChatResources.APPPAYSECRET);
// 证书位置
wxPayConfig.setKeyPath(WeChatResources.CERPATH);
// 微信返回url
wxPayConfig.setNotifyUrl(WeChatResources.NOTIFYURL);
return wxPayConfig;
}
}
3、根据实际业务逻辑编写代码
// service代码
@Service
@Slf4j
public class PayServiceImpl implements PayService {
@Autowired
private BestPayServiceImpl bestPayService;
/**
*
* @param price 付款金额
* @param openid 用户的openid
* @param orderId 订单id
* @param orderName 订单名称
* @return
*/
@Override
public PayResponse create(Double price,String openid,String orderId,String orderName) {
PayRequest payRequest = new PayRequest();
payRequest.setOpenid(openid);
payRequest.setOrderAmount(price);
payRequest.setOrderId(orderId);
payRequest.setOrderName(orderName);
payRequest.setPayTypeEnum(BestPayTypeEnum.WXPAY_MP);
PayResponse pay = bestPayService.pay(payRequest);
return pay;
}
}
// controller 代码
@GetMapping("create")
public ModelAndView create(HttpServletRequest request) {
ModelAndView mv = new ModelAndView("pay");
PayResponse payResponse = payService.create(Double.valueOf(payPrice), openid, "订单号码", "订单名称");
request.setAttribute("res", payResponse);
return mv;
}
// 支付成功后微信会访问设置的notifUrl,根据实际情况,判断用户支付是否成功返回对应的参数
@ResponseBody
@PostMapping("notify")
public String payResult(@RequestBody String notifyData) {
PayResponse notify = payService.notify(notifyData);
// 成功返回参数
return "<xml>" +
"<return_code><![CDATA[SUCCESS]]></return_code>"+
"<return_msg><![CDATA[OK]]></return_msg>"+
"</xml>";
}
// 前段代码
function onBridgeReady(){
WeixinJSBridge.invoke(
'getBrandWCPayRequest', {
"appId":"[[${res.appId}]]", //公众号名称,由商户传入
"timeStamp":"[[${res.timeStamp}]]", //时间戳,自1970年以来的秒数
"nonceStr":"[[${res.nonceStr}]]", //随机串
"package":"[[${res.packAge}]]",
"signType":"MD5", //微信签名方式:
"paySign":"[[${res.paySign}]]" //微信签名
},
function(res){
//成功后回调函数
});
}
if (typeof WeixinJSBridge == "undefined"){
if( document.addEventListener ){
document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
}else if (document.attachEvent){
document.attachEvent('WeixinJSBridgeReady', onBridgeReady);
document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
}
}else{
onBridgeReady();
}