微信公眾號開發--使用公眾號后台進行游戲激活碼


項目要發內測激活碼

使用前年做的公眾號相關開發來達成解放客戶精力。程序改變世界的小小理想。

相關開發文檔 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     }

 

 

以上就基本實現了改變世界的一小步

還是能便捷服務於大眾的東西做起來更快也更有成就感

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM