WeChatService.java 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package common.utils.wechat;
  2. import com.wechat.pay.java.core.notification.NotificationConfig;
  3. import com.wechat.pay.java.core.notification.NotificationParser;
  4. import com.wechat.pay.java.core.notification.RequestParam;
  5. import com.wechat.pay.java.service.payments.h5.model.*;
  6. import com.wechat.pay.java.service.payments.h5.H5Service;
  7. import com.wechat.pay.java.service.payments.model.Transaction;
  8. public class WeChatService {
  9. static H5Service h5Service = WeChatConfig.getService();
  10. /**
  11. * H5支付下单
  12. *
  13. * @param amount 订单数量
  14. * @param outTradeNo 内部订单号
  15. * @param notifyUrl 支付通知url
  16. * @return 结果,主要是H5Url
  17. */
  18. public static PrepayResponse prepay(Integer amount, String outTradeNo, String notifyUrl, SceneInfo sceneInfo) {
  19. PrepayRequest request = new PrepayRequest();
  20. // 交易数量
  21. Amount amountM = new Amount();
  22. amountM.setTotal(amount);
  23. // 参数配置
  24. request.setAmount(amountM);
  25. request.setAppid(WeChatConfig.appId);
  26. request.setMchid(WeChatConfig.merchantId);
  27. request.setDescription("购买ID:" + outTradeNo);
  28. request.setNotifyUrl(notifyUrl);
  29. request.setOutTradeNo(outTradeNo);
  30. request.setSceneInfo(sceneInfo);
  31. // 调用接口
  32. return h5Service.prepay(request);
  33. }
  34. // 将请求体解析为tx
  35. public static Transaction parseTransaction(String requestBody,
  36. String wechatPaySerial,
  37. String wechatpayNonce,
  38. String wechatSignature,
  39. String wechatTimestamp) {
  40. // 构造 RequestParam
  41. RequestParam requestParam = new RequestParam.Builder()
  42. .serialNumber(wechatPaySerial)
  43. .nonce(wechatpayNonce)
  44. .signature(wechatSignature)
  45. .timestamp(wechatTimestamp)
  46. .body(requestBody)
  47. .build();
  48. // 如果已经初始化了 NotificationConfig,可直接使用
  49. NotificationConfig config = WeChatConfig.getNConfig();
  50. // 初始化 NotificationParser
  51. NotificationParser parser = new NotificationParser(config);
  52. // 直接返回tx
  53. return parser.parse(requestParam, Transaction.class);
  54. }
  55. // 测试支付
  56. public static void main(String[] args) {
  57. // String notifyUrl = System.getenv("URL_BASE") + "/deposit/deposited/";
  58. String notifyUrl = "https://api.dlsh-nft.com.cn" + "/deposit/deposited/";
  59. String outTradeNo = "DLTBH_WX_" + System.currentTimeMillis();
  60. Integer amount = 100;
  61. // 场景信息
  62. H5Info h5Info = new H5Info();
  63. h5Info.setType("Wrp"); // 使用H5支付的场景:Wap、iOS、Android
  64. SceneInfo sceneInfo = new SceneInfo();
  65. sceneInfo.setPayerClientIp("163.53.18.23");
  66. sceneInfo.setH5Info(h5Info);
  67. prepay(amount, outTradeNo, notifyUrl, sceneInfo);
  68. }
  69. }