AlipayService.java 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package com.ywt.alipaympapi.face.impl;
  2. import com.alipay.api.AlipayClient;
  3. import com.alipay.api.AlipayRequest;
  4. import com.alipay.api.AlipayResponse;
  5. import com.alipay.api.DefaultAlipayClient;
  6. import com.ywt.alipaympapi.face.IAlipayService;
  7. import com.ywt.alipaympapi.models.Constants;
  8. import lombok.extern.slf4j.Slf4j;
  9. import org.springframework.stereotype.Component;
  10. /**
  11. * 支付宝服务实现
  12. */
  13. @Component
  14. @Slf4j
  15. public class AlipayService implements IAlipayService {
  16. private static final String TERMINAL_TYPE = "ptc_publish_system_20200918";
  17. /**
  18. * 执行
  19. *
  20. * @param request
  21. * @return
  22. */
  23. @Override
  24. public <T extends AlipayResponse> T execute(String appId, AlipayRequest<T> request) {
  25. T response;
  26. try {
  27. AlipayClient alipayClient = getAlipayClient(appId);
  28. long start = System.currentTimeMillis();
  29. request.setTerminalType(TERMINAL_TYPE);
  30. response = alipayClient.execute(request, null, null);
  31. long end = System.currentTimeMillis();
  32. log.info("API名称:{}, 耗时:{} ms", request.getApiMethodName(), (end - start));
  33. if (response.isSuccess()) {
  34. log.info(response.getBody());
  35. } else {
  36. log.error("response body:{}", response.getBody(), null);
  37. throw new RuntimeException("调用支付宝服务异常, subCode:" + response.getSubCode() + ",subMsg:" + response.getSubMsg());
  38. }
  39. return response;
  40. } catch (Exception e) {
  41. throw new RuntimeException(String.format("调用支付宝服务异常,request:%s", request), e);
  42. }
  43. }
  44. /**
  45. * 构造 AlipayClient,调用 AlipaySDK。有些业务场景(如“智能”消息)下用 EasySDK 调不通,只能使用普通 SDK
  46. * @param appId 小程序 appId
  47. * FIXME: 后续扩展多医院需要将 pk & apk 配置化
  48. */
  49. public AlipayClient getAlipayClient(String appId) {
  50. String pk = Constants.MERCHANT_PRIVATE_KEY;
  51. String apk = Constants.ALIPAY_PUBLIC_KEY;
  52. //实例化客户端
  53. return new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", appId, pk, "json", "UTF-8", apk, "RSA2");
  54. }
  55. }