ディレクトリ
はじめに:
今日は、マイクロチャネルの公共プラットフォームはイベントプッシュ一部を受け取る導入することである準備作業は、公式文書、マイクロチャネルの公共プラットフォームから見ることができるイベントプッシュを提供し、公共の数フォロー数の心配のユーザは、マイクロ手紙の中で開発者にコンテンツをプッシュすることができます公共のプラットフォーム構成URL、開発者はさらに、論理判定に、この情報を保持することができます。
設定するには、開発者を有効にするには、最初の部分
ステップ:
マイクロチャネル公共プラットフォーム(1)ログ
、マイクロ手紙公衆プラットフォームのアカウントをログに記録し、開発者のためのマイクロチャネル公共プラットフォームとなる、開発者は、設定ページにアクセスすることができ、次のアイコンの注意をクリックする必要があります。
(2)IPホワイトリストを設定します
複数のIPダイレクトラインフィード、このニーズを設定するときは、非常に重要な、以下に示すように、私はコンピュータの構成上の自分のIPアドレスを登る必要があります。
(3)構成するために、開発者を有効にします
カスタマイズするために、開発者がすることができ、トークンは、念のトークントークン以下のコードと私は一貫していることに注意してください。
(4)特定のコード呼び出し部
- 4.1インタフェースは、要求を取得する方法のニーズを呼び出します。
package com.bos.controller.wechat;
import com.bos.qiWechat.WXBizMsgCrypt;
import com.bos.service.WeiService;
import com.bos.util.WeiXinParamesUtil;
import com.bos.wechat.SignUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
/**
* @Author tanghh
* @Date 2020/4/3 10:12
*/
@RestController
@RequestMapping(value = "/wechat")
public class WechatDeveloperController {
/**
* 确认请求来自微信服务器
*
* @param signature 微信加密签
* @param timestamp 时间戳
* @param nonce 随机数
* @param echostr 随机字符串
* @param signature
* @param timestamp
* @param nonce
* @param echostr
* @return
*/
@RequestMapping(method = {RequestMethod.GET})
public void doGet(
@RequestParam(value = "signature", required = false) String signature,
@RequestParam(value = "timestamp", required = false) String timestamp,
@RequestParam(value = "nonce", required = false) String nonce,
@RequestParam(value = "echostr", required = false) String echostr,
HttpServletResponse response) throws Exception {
if (SignUtil.checkSignature(signature, timestamp, nonce)) {
response.getOutputStream().println(echostr);
System.out.println("微信验证成功");
}
}
}
- 4.2ログイン使用率
package com.bos.wechat;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
/**
* @Author: tanghh
*
*/
public class SignUtil {
private static String token = "WinXinEBO";
/**
* 校验签名
*
* @param signature 签名
* @param timestamp 时间戳
* @param nonce 随机数
* @return 布尔值
*/
public static boolean checkSignature(String signature, String timestamp, String nonce) {
String checktext = null;
if (null != signature) {
//对ToKen,timestamp,nonce 按字典排序
String[] paramArr = new String[]{token, timestamp, nonce};
Arrays.sort(paramArr);
//将排序后的结果拼成一个字符串
String content = paramArr[0].concat(paramArr[1]).concat(paramArr[2]);
try {
MessageDigest md = MessageDigest.getInstance("SHA-1");
//对接后的字符串进行sha1加密
byte[] digest = md.digest(content.toString().getBytes());
checktext = byteToStr(digest);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
//将加密后的字符串与signature进行对比
return checktext != null ? checktext.equals(signature.toUpperCase()) : false;
}
/**
* 将字节数组转化我16进制字符串
*
* @param byteArrays 字符数组
* @return 字符串
*/
private static String byteToStr(byte[] byteArrays) {
String str = "";
for (int i = 0; i < byteArrays.length; i++) {
str += byteToHexStr(byteArrays[i]);
}
return str;
}
/**
* 将字节转化为十六进制字符串
*
* @param myByte 字节
* @return 字符串
*/
private static String byteToHexStr(byte myByte) {
char[] Digit = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
char[] tampArr = new char[2];
tampArr[0] = Digit[(myByte >>> 4) & 0X0F];
tampArr[1] = Digit[myByte & 0X0F];
String str = new String(tampArr);
return str;
}
}
これらの操作は、上記の開発者の設定を開くことができます。[OK]
プッシュを受信するためのイベントの第二部
開発者は、後に上記の構成を設定している、あなたがイベントを受け取るプッシュを行うことができます!私はWechatDeveloperControllerに書きます
doPostメソッドは、サーバーから送信されたメッセージを受信するためにマイクロチャネルに使用されます
(1)インタフェース
package com.bos.controller.wechat;
import com.bos.qiWechat.WXBizMsgCrypt;
import com.bos.service.WeiService;
import com.bos.util.WeiXinParamesUtil;
import com.bos.wechat.SignUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
/**
* @Author tanghh
* @Date 2020/4/3 10:12
*/
@RestController
@RequestMapping(value = "/wechat")
public class WechatDeveloperController {
@Autowired
private WeiService weiService;
/**
* 确认请求来自微信服务器
*
* @param signature 微信加密签
* @param timestamp 时间戳
* @param nonce 随机数
* @param echostr 随机字符串
* @param signature
* @param timestamp
* @param nonce
* @param echostr
* @return
*/
@RequestMapping(method = {RequestMethod.GET})
public void doGet(
@RequestParam(value = "signature", required = false) String signature,
@RequestParam(value = "timestamp", required = false) String timestamp,
@RequestParam(value = "nonce", required = false) String nonce,
@RequestParam(value = "echostr", required = false) String echostr,
HttpServletResponse response) throws Exception {
if (SignUtil.checkSignature(signature, timestamp, nonce)) {
response.getOutputStream().println(echostr);
System.out.println("微信验证成功");
}
}
/**
* 处理微信服务器发来的消息
*
* @return
*/
@RequestMapping(method = {RequestMethod.POST})
public void dopost(HttpServletRequest request) {
// 调用核心业务类接收消息、处理消息
weiService.wechatReceiveEventChange(request);
}
}
(2)ビジネスロジッククラス
そのノート:私は暗号化と復号化の際にメッセージを処理しなかったので、私は、上記選択された現像剤の構成が明示モードで構成されたマイクロチャネルサーバから送られてきたが、直接XMLにマップに変換されます。
/**
* 微信开放平台--接收事件推送
* 文档地址:https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Receiving_event_pushes.html
* @return
*/
@Override
public ResultData wechatReceiveEventChange(HttpServletRequest request) {
ResultData resultData = new ResultData();
try{
//目前文档上记录的总共有6种事件类型
// a.(扫描带参数二维码事件)
// 如果用户还未关注公众号,则用户可以关注公众号,关注后微信会将带场景值关注事件推送给开发者。
// 如果用户已经关注公众号,则微信会将带场景值扫描事件推送给开发者。
//1.解析微信发来的请求,解析xml字符串
Map<String, String> requestMap = MessageUtil.xmlToMap(request);
//获取返回的数据
String event = requestMap.get("Event");
String eventKey = requestMap.get("EventKey");
String ticket = requestMap.get("Ticket");
}catch (Exception e){
resultData.setResult("false");
resultData.setMessage("微信接收事件推送失败");
logger.error("微信接收事件推送失败",e);
}
return resultData;
}
(3)MessageUtil
/**
* 将xml转换成map集合
* @param request
* @return
* @throws IOException
* @throws DocumentException
*/
public static Map<String, String> xmlToMap(HttpServletRequest request) throws IOException, DocumentException {
Map<String, String> map = new HashMap<String, String>();
//使用dom4j解析xml
SAXReader reader = new SAXReader();
//从request中获取输入流
InputStream ins = request.getInputStream();
Document doc = reader.read(ins);
//获取根元素
Element root = doc.getRootElement();
//获取所有的节点
List<Element> list = root.elements();
for (Element e : list) {
map.put(e.getName(), e.getText());
System.out.println(e.getName() + "----->" + e.getText());
}
ins.close(); //关流
return map;
}
(4)結果を印刷します。
要約:
ご質問があれば上記は設定するには、開発者のためのマイクロチャネル公共プラットフォームであり、イベントプッシュを受け、プロセスを使用し、コメントはその小さな書き込むための良い十分であれば、あなたはああのような小さなシリーズのポイントを与えることができ、コメント欄を歓迎します!
余談:
両方とも私がログインするために、ビジネスマイクロチャンネルスキャンコードをしていたときのような、企業のマイクロチャネルおよびマイクロ手紙を含め、重複箇所の多くを持っている人とは、マイクロ文字でそれを見つけたので、私は、マイクロチャネルの公共プラットフォーム上でも開始し、漠然としたオープンプラットフォームの概念を微信、サブスクリプションの数よりサービス番号を同様のロジックに署名するために、我々は、マイクロチャネルの公共プラットフォームの開発ニーズを持っているとき、私たちは最初に彼らの開発者になる必要がありますように、マイクロチャネルのスイープステップのログイン検証コードは、この文脈では、いくつかのより多くなりますスキャンコードより多くの機能が、あなたは、このようなマイクロチャンネルスキャンコードログインとして、先進的なインターフェースの一部を使用したい場合は、オープンプラットフォームのアカウント微信登録する必要があります。
微信オープンプラットフォームは、スキャン機能コードログを有効にしますが、特定のイベントまたはマイクロチャネル公共プラットフォームを通じてプッシュしながら。
例えば:私たちのシステムは、ユーザーが公共の番号を脱いで、携帯電話スキャンコード、公衆番号心配開発者とユーザーへの復帰情報にマイクロ文字の舞台裏を使用して、2次元コードを生成するには、マイクロチャネルの公共プラットフォームイベントプッシュ経由では、達成するために送られました開発者は、マイクロチャネルの公共プラットフォームのバックグラウンドでのconfigureのパラメータに必要な、この観点は、2つの一般的な領域がありました。
:より引用https://www.zhihu.com/question/21074751
編集者へのマイクロチャネル公共プラットフォーム、技術のためのオープンプラットフォームを微信。
公共のプラットフォームが実行するマイクロチャネル?
- 記事の髪の記事を書きます
- そして、ファンとのチャット
- 設定メニュー
- 公的機関番号(唯一の公共自分の番号)のすべての種類を開きます。
- 開発者モードを有効にすると、自分自身の公開番号を開発します
- 広告
- ビューデータ
オープンプラットフォームを行うことができます微信?
- APPは、などの友人のマイクロ手紙ログイン/共有サークルを、使用したいです
- PCは、マイクロサイトサインオンの文字を使用したいです
- 公共のサードパーティ製のプラットフォームの登録番号(すべての公共サービス番号)
- (小さなプログラムは、テンプレートを提供)、サードパーティのプラットフォームアプレットをサインアップ
- 結合、公開またはアプレットいいえ、UnionIDを形成します