1. 세 가지 유형의 WeChat 공개 계정
URL로 이동: https://mp.weixin.qq.com WeChat에 등록할 때, 필수입니다. 현재 WeChat 공개 계정의 세 가지 유형(구독 계정, 서비스 계정, 기업 계정) 중에서 선택합니다. 차이점은 다음과 같습니다.
더 많이 사용되는 공용 계정은 구독 계정과 서비스 계정입니다. 엔터프라이즈 계정은 일반적으로 동일한 회사의 직원이 통신 및 협업을 위해 사용합니다. 엔터프라이즈 계정은 공개되지 않으며 회사 직원만 구독 계정에 액세스할 수 없습니다. 그리고 서비스 계정은 대중에게 공개됩니다. 예, 누구나 팔로우할 수 있습니다. 구독 계정은 일반적으로 일부 그래픽 정보를 팔로어에게 정기적으로 푸시하는 데 사용되며 기타 쿼리 서비스도 제공할 수 있습니다. 서비스 계정에는 WeChat 결제 기능이 있으므로 일반적으로 상업적 목적으로 사용됩니다. 예를 들어 마이크로몰, 마이크로옥션 등
2. 위챗 개발자 기능을 켜주세요
위챗 공개 계정을 신청하신 후, 위챗 플랫폼에서 개발이 필요하신 경우, 먼저 WeChat 개발자 기능을 활성화해야 합니다. 위챗 개발자 기능을 활성화하려면 인증코드를 작성해야 하며, 접근 가능한 URL이 있어야 합니다. 먼저 WeChat 공개 플랫폼에 로그인하십시오: https://mp.weixin.qq.com/
"개발자 센터"를 클릭하고 "동의함"을 선택한 후 "개발자 되기"를 클릭하십시오.
다음 페이지로 이동하세요.
"구성 항목"을 클릭하세요. URL과 토큰이 포함되어 있습니다. . URL은 열기를 나타냅니다. 개발자 기능을 사용할 때 WeChat 서버는 URL 주소로 가져오기 요청을 보냅니다.
1) 타임스탬프: 타임스탬프
2) 난수: nonce
3) 난수 문자열: echostr
4) 사전에 있는 위 세 매개변수의 값으로 구성된 문자열로 구성된 SHA-1 알고리즘 요약 정보 order: Signature
우리가 달성하고자 하는 것은 채워진 URL의 get 요청 처리 클래스에서 timestamp, nonce, echostr 및 서명 네 가지 매개변수를 얻은 다음 해당 값을 계산하는 것입니다. 타임스탬프, 논스, 토큰으로 사전순으로 구성된 문자열에 대해서도 마찬가지로 SHA-1 알고리즘의 요약 정보는 Signature2이며, Signature2와 시그니처의 값이 동일한지 비교합니다. 동일하면 echostr이 그대로 반환됩니다. WeChat 서버가 echostr을 수신하면 개발자 기능이 성공적으로 활성화됩니다. 여기에 있는 토큰은 위에서 입력할 토큰입니다.
참고: Alipay에 접속한 경우 여기의 인증과 Alipay의 인증 간에 약간의 차이가 있음을 알 수 있습니다. 매개변수와 매개변수 값으로 구성된 키-값 쌍의 키 사전 순서에 따라 정렬되며 문자열 구성은 key1=value1+ & + key2=value2이고 WeChat이 확인에 참여하는 문자열은 value1입니다. + value2 + ...에는 키가 포함되지 않으며 값의 필드 순서에 따라 정렬됩니다.
해당 Java 코드는 다음과 같습니다.
WeChat get 요청을 처리하는 서블릿:
/** * 微信请求处理的核心类 */ public class CoreServlet extends HttpServlet { private static final long serialVersionUID = 4440739483644821986L; /** * 请求校验(确认请求来自微信服务器) */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 微信服务端发来的加密签名 String signature = request.getParameter("signature"); // 时间戳 String timestamp = request.getParameter("timestamp"); // 随机数 String nonce = request.getParameter("nonce"); // 随机字符串 String echostr = request.getParameter("echostr"); PrintWriter out = response.getWriter(); // 请求校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败 if (SignUtil.checkSignature(signature, timestamp, nonce)) { out.print(echostr); } out.close(); }
요청 확인 도구 클래스:
package com.sinaapp.wx.util; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Arrays; import com.sinaapp.wx.config.ParameterConfig; /** * 请求校验工具类 */ public class SignUtil { /** * 校验签名 * * @param signature 微信加密签名 * @param timestamp 时间 * @param nonce 随机字符串 * @return */ public static boolean checkSignature(String signature, String timestamp, String nonce) { String token = ParameterConfig.WX_TOKEN; String[] paramArr = new String[] { token, timestamp, nonce }; Arrays.sort(paramArr); // 对token、timestamp和nonce按字典排序 // 将排序后的结果拼接成字符串 StringBuilder sb = new StringBuilder(paramArr[0]); sb.append(paramArr[1]); sb.append(paramArr[2]); String cipherText = null; try { MessageDigest md = MessageDigest.getInstance("SHA-1"); byte[] digest = md.digest(sb.toString().getBytes()); // 对接后的字符串进行sha1加密 cipherText = byteToStr(digest); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } // 将加密后的字符串与微信服务器发来的签名signature进行对比 return cipherText != null ? cipherText.equals(signature.toUpperCase()) : false; } /** * 将字节数组转换为十六进制字符 * * @param byteArray * @return */ private static String byteToStr(byte[] byteArray) { String strDigest = ""; for (int i = 0; i < byteArray.length; i++) { strDigest += byteToHexStr(byteArray[i]); } return strDigest; } /** * 将单个字节转换为十六进制字符 * * @param mByte * @return */ private static String byteToHexStr(byte mByte) { char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; char[] tempArr = new char[2]; tempArr[0] = Digit[(mByte >>> 4) & 0X0F]; // 取一个字节的高4位,然后获得其对应的十六进制字符 tempArr[1] = Digit[mByte & 0X0F]; // 取一个字节的低4位,然后获得其对应的十六进制字符 return new String(tempArr); } }
코드의 String token = ParameterConfig.WX_TOKEN 값은 위에 채워진 토큰과 일치해야 합니다. web.xml에서 서블릿을 구성합니다:
<servlet> <servlet-name>coreServlet</servlet-name> <servlet-class>com.sinaapp.wx.servlet.CoreServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>coreServlet</servlet-name> <url-pattern>/coreServlet</url-pattern> </servlet-mapping>
그런 다음 공용 네트워크에서 액세스할 수 있는 URL 아래에 넣고 위 서블릿의 액세스 주소를 입력합니다. URL에서. 그런 다음 "제출" 버튼을 클릭하면 다음과 같은 프롬프트 메시지가 나타납니다.
이 시점에서 WeChat의 개발자 기능을 성공적으로 켰으며 다음 작업을 수행할 수 있습니다. WeChat 개발을 수행합니다. WeChat 결제에 사용되는 AppID와 AppSecret을 획득했습니다.
참고:
WeChat의 개발 문서 주소는 다음과 같습니다: http://mp.weixin.qq.com/wiki/home/index.html
WeChat 개발자 활성화를 위한 문서는 다음과 같습니다.
WeChat 개발과 개발자가 되는 방법에 대한 더 많은 기사를 보려면 PHP 중국어 웹사이트를 주목하세요. !