Bläddra i källkod

#515 小程序新增获取微信用户绑定手机号信息的解密方法

Binary Wang 7 år sedan
förälder
incheckning
44f61867fb

+ 10 - 0
weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaUserService.java

@@ -1,6 +1,7 @@
 package cn.binarywang.wx.miniapp.api;
 
 import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
+import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
 import cn.binarywang.wx.miniapp.bean.WxMaUserInfo;
 import me.chanjar.weixin.common.exception.WxErrorException;
 
@@ -28,6 +29,15 @@ public interface WxMaUserService {
   WxMaUserInfo getUserInfo(String sessionKey, String encryptedData, String ivStr);
 
   /**
+   * 解密用户手机号信息.
+   *
+   * @param sessionKey    会话密钥
+   * @param encryptedData 消息密文
+   * @param ivStr         加密算法的初始向量
+   */
+  WxMaPhoneNumberInfo getPhoneNoInfo(String sessionKey, String encryptedData, String ivStr);
+
+  /**
    * 验证用户信息完整性.
    *
    * @param sessionKey 会话密钥

+ 6 - 5
weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaUserServiceImpl.java

@@ -1,17 +1,13 @@
 package cn.binarywang.wx.miniapp.api.impl;
 
-import java.util.HashMap;
-import java.util.Map;
-
 import org.apache.commons.codec.digest.DigestUtils;
 
 import cn.binarywang.wx.miniapp.api.WxMaService;
 import cn.binarywang.wx.miniapp.api.WxMaUserService;
 import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
+import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
 import cn.binarywang.wx.miniapp.bean.WxMaUserInfo;
-import cn.binarywang.wx.miniapp.config.WxMaConfig;
 import cn.binarywang.wx.miniapp.util.crypt.WxMaCryptUtils;
-import com.google.common.base.Joiner;
 import me.chanjar.weixin.common.exception.WxErrorException;
 
 /**
@@ -35,6 +31,11 @@ public class WxMaUserServiceImpl implements WxMaUserService {
   }
 
   @Override
+  public WxMaPhoneNumberInfo getPhoneNoInfo(String sessionKey, String encryptedData, String ivStr) {
+    return WxMaPhoneNumberInfo.fromJson(WxMaCryptUtils.decrypt(sessionKey, encryptedData, ivStr));
+  }
+
+  @Override
   public boolean checkUserInfo(String sessionKey, String rawData, String signature) {
     final String generatedSignature = DigestUtils.sha1Hex(rawData + sessionKey);
     return generatedSignature.equals(signature);

+ 30 - 0
weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaPhoneNumberInfo.java

@@ -0,0 +1,30 @@
+package cn.binarywang.wx.miniapp.bean;
+
+import java.io.Serializable;
+
+import cn.binarywang.wx.miniapp.util.json.WxMaGsonBuilder;
+import lombok.Data;
+
+/**
+ * 微信用户绑定的手机号相关信息
+ * @author <a href="https://github.com/binarywang">Binary Wang</a>
+ */
+@Data
+public class WxMaPhoneNumberInfo implements Serializable {
+  private static final long serialVersionUID = 6719822331555402137L;
+
+  private String phoneNumber;
+  private String purePhoneNumber;
+  private String countryCode;
+  private Watermark watermark;
+
+  public static WxMaPhoneNumberInfo fromJson(String json) {
+    return WxMaGsonBuilder.create().fromJson(json, WxMaPhoneNumberInfo.class);
+  }
+
+  @Data
+  public static class Watermark {
+    private String timestamp;
+    private String appid;
+  }
+}

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 17 - 6
weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaUserServiceImplTest.java