MiniProgramOperator.java 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package com.cyksj.service.wechat;
  2. import com.cyksj.common.exception.BusinessRuntimeException;
  3. import com.cyksj.common.util.IoKit;
  4. import com.cyksj.common.util.J11HttpC;
  5. import com.cyksj.common.util.Jsons;
  6. import com.cyksj.model.dto.MiniProgramSession;
  7. import com.cyksj.model.dto.WeChatAccessToken;
  8. import java.net.http.HttpResponse;
  9. /**
  10. * @author valor.
  11. * @date 2019/12/3 20:44
  12. */
  13. public class MiniProgramOperator implements MiniProgramOps {
  14. // private static final Logger log = LoggerFactory.getLogger(MiniProgramOperator.class);
  15. private MiniProgramOperator() { }
  16. private static volatile MiniProgramOperator instance;
  17. public static MiniProgramOperator getInstance() {
  18. if (null == instance) {
  19. synchronized (MiniProgramOperator.class) {
  20. if (null == instance) {
  21. instance = new MiniProgramOperator();
  22. }
  23. }
  24. }
  25. return instance;
  26. }
  27. @Override
  28. public MiniProgramSession code2session(String appid, String secret, String code) throws Exception {
  29. // GET https://api.weixin.qq.com/sns/jscode2session?appid={APPID}&secret={SECRET}&js_code={JSCODE}&grant_type=authorization_code
  30. String url = "https://api.weixin.qq.com/sns/jscode2session" +
  31. "?appid=" + appid +
  32. "&secret=" + secret +
  33. "&js_code=" + code +
  34. "&grant_type=authorization_code";
  35. HttpResponse<byte[]> res =
  36. J11HttpC.custom()
  37. .ofGet()
  38. .url(url)
  39. .send(HttpResponse.BodyHandlers.ofByteArray());
  40. if (200 != res.statusCode()) {
  41. throw BusinessRuntimeException.getInstance("获取用户信息失败: " + IoKit.toString(res.body()));
  42. }
  43. MiniProgramSession session = Jsons.parseObject(res.body(), MiniProgramSession.class);
  44. if (null == session) {
  45. throw BusinessRuntimeException.getInstance("获取用户信息失败: " + IoKit.toString(res.body()));
  46. }
  47. final Integer errcode = session.getErrcode();
  48. if (null != errcode && 0 != errcode) {
  49. throw BusinessRuntimeException.getInstance("获取用户信息失败: " + session.getErrmsg() + "[" + errcode + "]");
  50. }
  51. return session;
  52. }
  53. @Override
  54. public WeChatAccessToken access_token(String appid, String secret) throws Exception {
  55. // GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={APPID}&secret={APPSECRET}
  56. String url = "https://api.weixin.qq.com/cgi-bin/token" +
  57. "?appid=" + appid +
  58. "&secret=" + secret +
  59. "&grant_type=client_credential";
  60. HttpResponse<byte[]> res =
  61. J11HttpC.custom()
  62. .ofGet()
  63. .url(url)
  64. .send(HttpResponse.BodyHandlers.ofByteArray());
  65. if (200 != res.statusCode()) {
  66. throw BusinessRuntimeException.getInstance("获取access_token失败: " + IoKit.toString(res.body()));
  67. }
  68. WeChatAccessToken token = Jsons.parseObject(res.body(), WeChatAccessToken.class);
  69. if (null == token) {
  70. throw BusinessRuntimeException.getInstance("获取access_token失败: " + IoKit.toString(res.body()));
  71. }
  72. final Integer errcode = token.getErrcode();
  73. if (null != errcode && 0 != errcode) {
  74. throw BusinessRuntimeException.getInstance("获取access_token失败: " + token.getErrmsg() + "[" + errcode + "]");
  75. }
  76. return token;
  77. }
  78. }