|
项目要发内测激活码
使用前年做的公众号相关开发来达成解放客户精力。程序改变世界的小小理想。
相关开发文档 https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Overview.html
基本需求 我方生成一批不重复的字符串组合-激活码.参考之前礼包码的工作方式实现后续内容。
发放问题使用微信公众号 自定义菜单 ->调用API 自定义消息回复按照对方微信userId返回一个对应的激活码
效果示例
公众号接口调试
使用开发平台接口调试工具 https://mp.weixin.qq.com/debug/
前置条件需要设置公众号API白名单 API相关配置 取得AppId secret token等
使用获取token调试接口拿取token
后续部分接口需要使用token来验证身份
自定义菜单定义部分
使用自定义菜单后 公众号后台大部分交互设置会完全托管给API
如示例的菜单定义json
{
"menu": {
"button": [
{
"type": "click",
"name": "官方Q群",
"key": "btn1",
"sub_button": [ ]
},
{
"name": "测试账号",
"sub_button": [
{
"type": "click",
"name": "steam激活码",
"key": "sub1",
"sub_button": [ ]
},
{
"type": "click",
"name": "官方激活码",
"key": "sub2",
"sub_button": [ ]
}
]
},
{
"type": "click",
"name": "礼包领取",
"key": "btn3",
"sub_button": [ ]
}
]
}
}
使用create get接口修改自定义菜单 测试结果
使用API接收并恢复自定义消息
需要先查阅文档 区分每一种消息的接收和回复格式
按照MsgType 区分具体的消息类型 然后解读消息内容。并返回消息
//接受普通消息
public function responseMsg()
{
// $timestamp = input('get.timestamp');
// $nonce = input('get.nonce');
$ret = '';
$postStr = Request::instance()->getContent();
$xmlArrayInput = $this->parseXml($postStr);
if (isset($xmlArrayInput)) {
Log::record('Type: ' . $xmlArrayInput['MsgType'], 'debug');
switch ($xmlArrayInput['MsgType']) {
case 'event':
$ret = $this->eventResponHandler($xmlArrayInput);
break;
case 'text':
$ret = $this->txtResponHandler($xmlArrayInput);
break;
case 'image':
$ret = $this->imgResponHandler($xmlArrayInput);
break;
case 'video':
// $ret = $this->videoResponHandler($xmlArray);
$ret = $this->txtResponBack($xmlArrayInput,'您刚发的是视频');
break;
case 'voice':
$ret = $this->voiceResponHandler($xmlArrayInput);
break;
case 'shortvideo':
// $ret = $this->shortVideoResponHandler($xmlArray);
$ret = $this->txtResponBack($xmlArrayInput, '您刚发的是小视频');
break;
case 'link':
// $ret = $this->linkResponHandler($xmlArray);
$ret = $this->txtResponBack($xmlArrayInput, '您刚发的是链接');
break;
}
} else
echo '';
echo $ret;
return true;
}
1 //event 关注 取消关注事件回复处理
2 private function eventResponHandler($xmlArray)
3 {
4 $ret = '';
5 $contentStr='按钮应答还未实现';
6 $back = "<xml>
7 <ToUserName><![CDATA[%s]]></ToUserName>
8 <FromUserName><![CDATA[%s]]></FromUserName>
9 <CreateTime>%s</CreateTime>
10 <MsgType><![CDATA[%s]]></MsgType>
11 <Content><![CDATA[%s]]></Content>
12 </xml>";
13 if ($xmlArray['Event'] == 'subscribe') {
14 $contentStr = "这是一个价值1个亿的AI演示公众号.有多厉害你跟我聊几句试试!\n还可以玩图片抽奖哦!不信你发几张图片试试";
15
16 } elseif ($xmlArray['Event'] == 'unsubscribe') {
17 //todo 取消订阅 为保护用户数据隐私,开发者收到用户取消关注事件时需要删除该用户的所有信息。
18 }
19 elseif ($xmlArray['Event'] == 'CLICK' && $xmlArray['EventKey']=='btn1' ) {
20 // 自定义菜单官方Q群
21 $path = APP_PATH .'WeChatAnswer.xml';
22 $answer = readXml($path);
23 $contentStr = $answer['btn1'];
24 //\cache('wxuser', $xmlArray['FromUserName']);
25 }
26 elseif ($xmlArray['Event'] == 'CLICK' && $xmlArray['EventKey']=='sub1' ) {
27 // 自定义菜单 steam激活码
28 $code = AccountCode::getCodeByWxuser($xmlArray['FromUserName'],0);
29 $answer = readXml(APP_PATH ."/WeChatAnswer.xml");
30 $contentStr = sprintf($answer['sub1'],$code);
31 }
32 elseif ($xmlArray['Event'] == 'CLICK' && $xmlArray['EventKey']=='sub2' ) {
33 // 自定义菜单 官方激活码
34 $code = AccountCode::getCodeByWxuser($xmlArray['FromUserName'],1);
35 $answer = readXml(APP_PATH ."/WeChatAnswer.xml");
36 $contentStr = sprintf($answer['sub2'],$code);
37 }
38 elseif ($xmlArray['Event'] == 'CLICK' && $xmlArray['EventKey']=='btn3' ) {
39 //自定义礼包码菜单
40 $path = APP_PATH .'WeChatAnswer.xml';
41 $answer = readXml($path);
42 $contentStr = $answer['btn3'];
43 }
44 else
45 {
46 $contentStr .= ' ' .$xmlArray['EventKey'];
47 }
48
49 $ret = sprintf($back, $xmlArray['FromUserName'], $xmlArray['ToUserName'], time(), 'text', $contentStr);
50 return $ret;
51
52 }
再演示了一个皮一下斗图的公众号
1 private function imgResponHandler($xmlArray)
2 {
3 $ret = '';
4 $back = "<xml>
5 <ToUserName><![CDATA[%s]]></ToUserName>
6 <FromUserName><![CDATA[%s]]></FromUserName>
7 <CreateTime>%s</CreateTime>
8 <MsgType><![CDATA[%s]]></MsgType>
9 <Image>
10 <MediaId><![CDATA[%s]]></MediaId>
11 </Image>
12 </xml>";
13 $imgId = $xmlArray['MediaId'];
14 //$imgId = 2223;
15 Log::record('input imgId ' . $imgId, 'debug');
16 WeChatTmpZsetManger::insertImg($imgId);
17 $getImgid = WeChatTmpZsetManger::getImg();
18 Log::record('output imgId ' . $getImgid, 'debug');
19 $ret = sprintf($back, $xmlArray['FromUserName'], $xmlArray['ToUserName'], time(), 'image', $getImgid);
20 return $ret;
21 }
以上就基本实现了改变世界的一小步
还是能便捷服务于大众的东西做起来更快也更有成就感
来源:https://www.cnblogs.com/xiloweiEVE/p/13026481.html |