微信第三方平臺(tái)授權(quán)開(kāi)發(fā)

分享一下微信的第三方平臺(tái)授權(quán)吧,中間還是有挺多坑的唤殴,開(kāi)發(fā)前一定要仔細(xì)的看幾遍文檔

一哺窄、首先在微信申請(qǐng)成為第三方捐下,流程按著微信提示的走就好了

二、開(kāi)發(fā)授權(quán)

1萌业、接收 微信的推送 component_verify_ticket 協(xié)議

在第三方平臺(tái)創(chuàng)建審核通過(guò)后坷襟,微信服務(wù)器會(huì)向其“授權(quán)事件接收URL”每隔10分鐘定時(shí)推送component_verify_ticket。第三方平臺(tái)方在收到ticket推送后也需進(jìn)行解密(詳細(xì)請(qǐng)見(jiàn)【消息加解密接入指引】)生年,接收到后必須直接返回字符串success婴程。
點(diǎn)進(jìn)【消息加解密接入指引】后,下載SDK包抱婉,在項(xiàng)目中引入排抬,我就用ThinkPHP5舉例了
將php包放到 /extend/Wxapi/

微信SDK包位置

<?php
/**
 * 三方平臺(tái)微信授權(quán)
 *
 */
namespace app\home\controller\api;

use think\Controller;
use think\Db;
use Endroid\QrCode\QrCode;
use think\Loader;

Loader::import('Wxapi.wx', EXTEND_PATH, '.BizMsgCrypt.php');
class Wxapi extends Controller
{
    function __construct()
    {
        parent::__construct();
        $this->token          = '自己的token';
        $this->encodingAesKey = '自己的encodingAesKey ';
        $this->appid          = 'appid';
        $this->appsecret      = 'appsecret';
    }
    //1懂从、接收component_verify_ticket協(xié)議
    public function Accredit()
    {
        $token = $this->token;
        $encodingAesKey = $this->encodingAesKey;
        $appId = $this->appid;
    
        $pc = new \WXBizMsgCrypt($token, $encodingAesKey, $appId);
        
        $timeStamp  = empty($_GET['timestamp'])     ? ""    : trim($_GET['timestamp']) ;
        $nonce      = empty($_GET['nonce'])     ? ""    : trim($_GET['nonce']) ;
        $msg_sign   = empty($_GET['msg_signature']) ? ""    : trim($_GET['msg_signature']) ;
        $encryptMsg = file_get_contents('php://input');
        echo 'success';
        $xml_tree = new \DOMDocument();
        $xml_tree->loadXML($encryptMsg);
        $array_e = $xml_tree->getElementsByTagName('Encrypt');
        $encrypt = $array_e->item(0)->nodeValue;


        $format = "<xml><ToUserName><![CDATA[toUser]]></ToUserName><Encrypt><![CDATA[%s]]></Encrypt></xml>";
        $from_xml = sprintf($format, $encrypt);
        $this->logResult('/form.log', $from_xml);
        // 第三方收到公眾號(hào)平臺(tái)發(fā)送的消息
        $msg = '';
        $errCode = $pc->decryptMsg($msg_sign, $timeStamp, $nonce, $from_xml, $msg);
        if ($errCode == 0) {
            //print("解密后: " . $msg . "\n");
            $xml = new \DOMDocument();
            $xml->loadXML($msg);
            $array_e = $xml->getElementsByTagName('ComponentVerifyTicket');
            $component_verify_ticket = $array_e->item(0)->nodeValue;
            $arr['wxtoken'] = $component_verify_ticket;
            $arr['type'] = 1;
            $arr['effective'] = time()+300; 
            $res = Db::table('wxtoken')->where('id',1)->update($arr);
            file_put_contents(EXTEND_PATH.'/ticket.log', $component_verify_ticket);
            // $this->logResult('/msgmsg.log','解密后的component_verify_ticket是:'.$component_verify_ticket);

            $msgObj = simplexml_load_string($msg, 'SimpleXMLElement', LIBXML_NOCDATA);
            $content = trim($msgObj->Content);
 
            //第三方平臺(tái)全網(wǎng)發(fā)布檢測(cè)普通文本消息測(cè)試 
            if (strtolower($msgObj->MsgType) == 'text' && $content == 'TESTCOMPONENT_MSG_TYPE_TEXT') {
                $toUsername = trim($msgObj->ToUserName);
                if ($toUsername == 'gh_3c884a361561') { 
                    $content = 'TESTCOMPONENT_MSG_TYPE_TEXT_callback'; 
                    echo $this->responseText($msgObj, $content);
                }
            }
            //第三方平臺(tái)全網(wǎng)發(fā)布檢測(cè)返回api文本消息測(cè)試 
            if (strpos($content, 'QUERY_AUTH_CODE') !== false) { 
                $toUsername = trim($msgObj->ToUserName);
                if ($toUsername == 'gh_3c884a361561') { 
                    $query_auth_code = str_replace('QUERY_AUTH_CODE:', '', $content);
                    $params = $this->dedeLogic->api_query_auth($query_auth_code);
                    $authorizer_access_token = $params['authorization_info']['authorizer_access_token']; 
                    $content = "{$query_auth_code}_from_api"; 
                    $this->sendServiceText($msgObj, $content, $authorizer_access_token);
                }
            }
            return 'success';
        } else {
            $this->logResult('/error.log','解密后失敗:'.$errCode);
            print($errCode . "\n");
        }
    }

2蹲蒲、獲取第三方平臺(tái)component_access_token

/**
     *  2番甩、獲取第三方平臺(tái)component_access_token 
     */
    function GetComponent(){
        $verify_ticket = Db::table('wxtoken')->where('id',1)->find();
        $component =$verify_ticket['wxtoken']; 
        $url = "https://api.weixin.qq.com/cgi-bin/component/api_component_token";
        $data = array(
                    "component_appid"=>$this->appid,
                    "component_appsecret"=>$this->appsecret,
                    "component_verify_ticket"=>$component
                );
        $send_result = $this->httpRequest($url,'POST',json_encode($data));
        $send_result = json_decode($send_result,true);
        $component_access_token = empty($send_result['component_access_token']) ? "" : trim($send_result['component_access_token']);
        $arr['wxtoken'] = $component_access_token;
        $arr['type'] = 2;
        $arr['effective'] = time()+6600; 
        $res = Db::table('wxtoken')->where('id',2)->update($arr);
        // var_dump($send_result);
        return $component_access_token;
    }

3、獲取預(yù)授權(quán)碼pre_auth_code

    /**
     *  3届搁、獲取預(yù)授權(quán)碼pre_auth_code
     */
    private function Precode(){
        $data = Db::table('wxtoken')->where('id','3')->find();
        if(!empty($data) && $data['effective']<=time()){

            $component = Db::table('wxtoken')->where('id',2)->find();
            if(!empty($component) && $component['effective']>time()){
                $token = $component['wxtoken'];
            }else{
                $token = $this->GetComponent();
            }
            $url = "https://api.weixin.qq.com/cgi-bin/component/api_create_preauthcode?component_access_token={$token}";
            $data = array(
                        "component_appid"=>$this->appid
                    );
            $send_result = $this->httpRequest($url,'POST',json_encode($data));
            $send_result = json_decode($send_result,true);
            $arr['wxtoken'] = empty($send_result['pre_auth_code']) ? '': trim($send_result['pre_auth_code']);
            $arr['type'] = 3;
            $arr['effective'] = time()+600; 
            $res = Db::table('wxtoken')->where('id','3')->update($arr);
            // var_dump($send_result);
            return $arr['wxtoken'];
        }else{
            return $data['wxtoken'];
        }
        
    }

4缘薛、使用預(yù)授權(quán)碼換取用戶授權(quán)碼

    // 4、第四步前一半卡睦,返回用戶授權(quán)二維碼
    public function qrcode($vid)
    {
        $appid = $this->appid;
        $precode = $this->Precode();
        $redirect_uri = 'xxxx.com/home/miniapp/succeed?vid='.$vid; //授權(quán)后回調(diào)傳值地址
        $qrCode=new QrCode();
        //電腦網(wǎng)頁(yè)端驗(yàn)證
        $url = 'https://mp.weixin.qq.com/cgi-bin/componentloginpage?component_appid='.$appid.'&pre_auth_code='.$precode.'&redirect_uri='.$redirect_uri.'&auth_type=2';
        return $url;
     }

    /**
     *  4宴胧、第四步的后一半,用戶授權(quán)后回調(diào)地址 
     *  授權(quán)后回調(diào)URI表锻,得到授權(quán)碼(authorization_code)和過(guò)期時(shí)間
     *  第三方平臺(tái)獲取到的該小程序授權(quán)的authorizer_access_token
     */ 
    function Succeed(){
        $map['vid'] = input('get.vid');
        $authorization_code = empty($_GET['auth_code']) ? "" : trim($_GET['auth_code']);
        $expires_in = empty($_GET['expires_in']) ? '' : (trim($_GET['expires_in'])+time());
        $map['wxtoken'] = $authorization_code;
        $map['effective'] = $expires_in;
        //這里是把授權(quán)信息存儲(chǔ)起來(lái)
        $res = Db::table('wxtoken')->where('vid',$map['vid'])->find();
        if($res){
            $test = Db::table('wxtoken')->where('vid',$map['vid'])->update($map);
        }else{
            $test = Db::table('wxtoken')->insert($map);
        }
        if($res && $test){
            $result = '授權(quán)成功';
        }else{
            $result = '授權(quán)失敗';
        }
        $this->assign('result',$result);
        return $this->fetch('accredit');
    }

5恕齐、使用授權(quán)碼換取公眾號(hào)或小程序的接口調(diào)用憑據(jù)和授權(quán)信息

     /**
     *  5、使用授權(quán)碼換取公眾號(hào)或小程序的接口調(diào)用憑據(jù)和授權(quán)信息
     *  微信授權(quán)文檔中4
     *  獲取authorizer_access_token和authorizer_refresh_token
     */
    public function get_authorizer_token($vid){
        if(empty($vid)){return false; }
        //第三方平臺(tái)appid
        $appid = $this->appid;
        //獲取用戶授權(quán)碼 authorization_code
        $auth_code_value = Db::table('wxtoken')->where('vid',$vid)->find();

        //獲取 component_access_token 
        $component = Db::table('wxtoken')->where('id',2)->find();
        if(!empty($component) && $component['effective']>time()){
            $token = $component['wxtoken'];
        }else{
            $token = $this->GetComponent();
        }

        // var_dump($auth_code_value);die;
        if(empty($auth_code_value)) { 
            return 1; //沒(méi)有授權(quán)碼
        }
        if($auth_code_value['effective'] < time()){
            //授權(quán)碼過(guò)期 , 用令牌去刷新authorizer_access_token
            $authorizer_access_token = $this->refresh_code($appid,$token);
            return $authorizer_access_token;
        }else{
            $auth_code_value = $auth_code_value['wxtoken'];
        }
        
        $url = "https://api.weixin.qq.com/cgi-bin/component/api_query_auth?component_access_token=$token";
        $data = array(
            "component_appid"=>"$appid",
            "authorization_code"=>"$auth_code_value"
        );
        $authorizerData = $this->httpRequest($url,'POST',json_encode($data));
        //授權(quán)成功后json串
        // $authorizerData = '{"authorization_info":{"authorizer_appid":"wxc756dcabc3f745a0","authorizer_access_token":"16_VTixr87SXLN0VElDCXLEQatq7aPoG_JXAaWoAnGfe8eFeZELbx8PmVbswUwqG9UQSh3BYPinvUejWlG1JKlaOttOX3h9EGgV5KTrggN3bRpU4EQUpzqh-xGTNdUMQousIg0adK8MYePXwRBOPFTdAEDCSG","expires_in":7200,"authorizer_refresh_token":"refreshtoken@@@-XgUNiQhWcCugsXx9Dh-tOPQK_JL-o3yepI4wto2wmw","func_info":[{"funcscope_category":{"id":17}},{"funcscope_category":{"id":18},"confirm_info":{"need_confirm":0,"already_confirm":0,"can_confirm":0}},{"funcscope_category":{"id":19}},{"funcscope_category":{"id":25},"confirm_info":{"need_confirm":0,"already_confirm":0,"can_confirm":0}},{"funcscope_category":{"id":30},"confirm_info":{"need_confirm":0,"already_confirm":0,"can_confirm":0}},{"funcscope_category":{"id":31},"confirm_info":{"need_confirm":0,"already_confirm":0,"can_confirm":0}},{"funcscope_category":{"id":37}},{"funcscope_category":{"id":40}}]}}';
        $test = json_decode($authorizerData,true);
        if(array_key_exists('authorization_info', $test)){
            $test  = $test['authorization_info'];
            $arr['component_appid'] = $appid;
            $arr['authorizer_appid'] = $test['authorizer_appid'];
            $arr['authorizer_access_token'] = $test['authorizer_access_token'];
            $arr['expires_in'] = intval($test['expires_in'])+time();//有效期2H
            $arr['authorizer_refresh_token'] = $test['authorizer_refresh_token'];
            $arr['func_info'] = '';
            $res = Db::name('miniapp_accredit')->insert($arr);
            return $test;
        }else{
            return false;
        }
        
    }

用戶授權(quán)的授權(quán)碼有效期為10分鐘瞬逊,過(guò)期后刷新

    /**
     *  用戶授權(quán)的授權(quán)碼有效期為10分鐘显歧,過(guò)期后刷新
     *  獲取(刷新)授權(quán)公眾號(hào)或小程序的接口調(diào)用憑據(jù)(令牌)
     *  component_appid 第三方平臺(tái)appid
     *  authorizer_appid 授權(quán)方appid
     *  authorizer_refresh_token 授權(quán)方的刷新令牌
     */
    public function refresh_code($appid,$token){
        $tokens = Db::name('miniapp_accredit')->where('component_appid',$appid)->find();
        if(empty($tokens)){
            //沒(méi)有存放用戶刷新令牌确镊,只能重新授權(quán)
            echo '沒(méi)有存放用戶刷新令牌士骤,只能重新授權(quán)';
            return false;
        }elseif($tokens['expires_in'] > time()){
            //還在有效期
            return $tokens;
        }
        $url = "https://api.weixin.qq.com/cgi-bin/component/api_authorizer_token?component_access_token=$token";
        $data = array(
            "component_appid"=>"$appid",
            "authorizer_appid"=>$tokens['authorizer_appid'],
            "authorizer_refresh_token"=>$tokens['authorizer_refresh_token'],
        );
        $authorizerData = $this->httpRequest($url,'POST',json_encode($data));
        $test = json_decode($authorizerData,true);
        if($test){
            $arr['authorizer_access_token'] = $test['authorizer_access_token'];
            $arr['expires_in'] = intval($test['expires_in'])+time();//有效期2H
            $arr['authorizer_refresh_token'] = $test['authorizer_refresh_token'];
            $res = Db::table('miniapp_accredit')->where('id',$tokens['id'])->update($arr);
            unset($arr);
        }
        $test['authorizer_appid'] = $tokens['authorizer_appid'];
        return $test;
    }

CURL請(qǐng)求

    /**
     * CURL請(qǐng)求
     * @param $url 請(qǐng)求url地址
     * @param $method 請(qǐng)求方法 get post
     * @param null $postfields post數(shù)據(jù)數(shù)組
     * @param array $headers 請(qǐng)求header信息
     * @param bool|false $debug  調(diào)試開(kāi)啟 默認(rèn)false
     * @return mixed
     */
    function httpRequest($url, $method="GET", $postfields = null, $headers = array(), $debug = false) {
        $method = strtoupper($method);
        $ci = curl_init();
        /* Curl settings */
        curl_setopt($ci, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
        curl_setopt($ci, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0");
        curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, 60); /* 在發(fā)起連接前等待的時(shí)間,如果設(shè)置為0蕾域,則無(wú)限等待 */
        curl_setopt($ci, CURLOPT_TIMEOUT, 7); /* 設(shè)置cURL允許執(zhí)行的最長(zhǎng)秒數(shù) */
        curl_setopt($ci, CURLOPT_RETURNTRANSFER, true);
        switch ($method) {
            case "POST":
                curl_setopt($ci, CURLOPT_POST, true);
                if (!empty($postfields)) {
                    $tmpdatastr = is_array($postfields) ? http_build_query($postfields) : $postfields;
                    curl_setopt($ci, CURLOPT_POSTFIELDS, $tmpdatastr);
                }
                break;
            default:
                curl_setopt($ci, CURLOPT_CUSTOMREQUEST, $method); /* //設(shè)置請(qǐng)求方式 */
                break;
        }
        $ssl = preg_match('/^https:\/\//i',$url) ? TRUE : FALSE;
        curl_setopt($ci, CURLOPT_URL, $url);
        if($ssl){
            curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, FALSE); // https請(qǐng)求 不驗(yàn)證證書(shū)和hosts
            curl_setopt($ci, CURLOPT_SSL_VERIFYHOST, FALSE); // 不從證書(shū)中檢查SSL加密算法是否存在
        }
        //curl_setopt($ci, CURLOPT_HEADER, true); /*啟用時(shí)會(huì)將頭文件的信息作為數(shù)據(jù)流輸出*/
        curl_setopt($ci, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($ci, CURLOPT_MAXREDIRS, 2);/*指定最多的HTTP重定向的數(shù)量拷肌,這個(gè)選項(xiàng)是和CURLOPT_FOLLOWLOCATION一起使用的*/
        curl_setopt($ci, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($ci, CURLINFO_HEADER_OUT, true);
        /*curl_setopt($ci, CURLOPT_COOKIE, $Cookiestr); * *COOKIE帶過(guò)去** */
        $response = curl_exec($ci);
        $requestinfo = curl_getinfo($ci);
        $http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE);
        if ($debug) {
            echo "=====post data======\r\n";
            var_dump($postfields);
            echo "=====info===== \r\n";
            print_r($requestinfo);
            echo "=====response=====\r\n";
            print_r($response);
        }
        curl_close($ci);
        return $response;
        //return array($http_code, $response,$requestinfo);
    }

喜歡的朋友可以點(diǎn)擊喜歡和收藏,如果轉(zhuǎn)載請(qǐng)注明出處http://www.reibang.com/p/dd6c4be503f0

上面就是全部授權(quán)內(nèi)容了旨巷,感覺(jué)有幫助的巨缘,關(guān)注一下
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市采呐,隨后出現(xiàn)的幾起案子带猴,更是在濱河造成了極大的恐慌,老刑警劉巖懈万,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異靶病,居然都是意外死亡会通,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)娄周,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)涕侈,“玉大人,你說(shuō)我怎么就攤上這事煤辨∩烟危” “怎么了木张?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)端三。 經(jīng)常有香客問(wèn)我舷礼,道長(zhǎng),這世上最難降的妖魔是什么郊闯? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任妻献,我火速辦了婚禮,結(jié)果婚禮上团赁,老公的妹妹穿的比我還像新娘育拨。我一直安慰自己,他們只是感情好欢摄,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布熬丧。 她就那樣靜靜地躺著,像睡著了一般怀挠。 火紅的嫁衣襯著肌膚如雪析蝴。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,125評(píng)論 1 297
  • 那天唆香,我揣著相機(jī)與錄音嫌变,去河邊找鬼。 笑死躬它,一個(gè)胖子當(dāng)著我的面吹牛腾啥,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播冯吓,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼倘待,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了组贺?” 一聲冷哼從身側(cè)響起凸舵,我...
    開(kāi)封第一講書(shū)人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎失尖,沒(méi)想到半個(gè)月后啊奄,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡掀潮,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年菇夸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片仪吧。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡庄新,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情择诈,我是刑警寧澤械蹋,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站羞芍,受9級(jí)特大地震影響哗戈,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜涩金,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一谱醇、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧步做,春花似錦副渴、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至将鸵,卻和暖如春勉盅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背顶掉。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工草娜, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人痒筒。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓宰闰,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親簿透。 傳聞我的和親對(duì)象是個(gè)殘疾皇子移袍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 先來(lái)體驗(yàn)一下微信公眾平臺(tái)二維碼授權(quán)功能 https://a86.cn/weixin3rd/index.jsp 一、...
    蔓越莓餅干閱讀 7,899評(píng)論 0 1
  • 說(shuō)在前面 根據(jù)產(chǎn)品需求老充,需要在已有平臺(tái)上接入微信第三方平臺(tái)葡盗,這也是我第一次開(kāi)發(fā)微信相關(guān)內(nèi)容,在這期間走了不少?gòu)澛罚?..
    YancyPeng閱讀 18,526評(píng)論 2 5
  • 微信第三方平臺(tái)的開(kāi)發(fā)文檔是真的看到令人自閉, wechatpy 的文檔也沒(méi)有詳細(xì)的解釋啡浊。記錄一下瘋狂看文檔的兩天觅够。...
    唐思佳閱讀 1,343評(píng)論 0 0
  • 每次回家,車(chē)子總會(huì)從一級(jí)路上駛過(guò)巷嚣,對(duì)岸廣播站的石臺(tái)上喘先,老樟樹(shù)早已不見(jiàn)。 最后一次見(jiàn)到它涂籽,是2007年夏天一場(chǎng)雷雨過(guò)...
    劉雨天閱讀 474評(píng)論 0 0
  • 最怕一生碌碌無(wú)為 還說(shuō)平凡難能可貴
    長(zhǎng)江客閱讀 134評(píng)論 0 2