亚洲精品成人_精品成人一区_999视频在线播放_免费黄色在线_亚洲成人久久久_久久www免费视频

快速開始

在我們已經成功安裝完成 EasySwoole WeChat SDK 組件后,就可以很快地開始使用它了,當然你還是有必要明白 PHP 的基本知識,如命名空間等,我這里就不贅述了。

接下來我們以完成 服務器端驗證接收響應用戶發送的消息 為例來演示,首先我們有必要先了解一下微信交互的運行流程:

具體交互流程如下:

                                 +-----------------+                       +---------------+
+----------+                     |                 |    POST/GET/PUT       |               |
|          | ------------------> |                 | ------------------->  |               |
|   user   |                     |  wechat server  |                       |  your server  |
|          | < - - - - - - - - - |                 |                       |               |
+----------+                     |                 | <- - - - - - - - - -  |               |
                                 +-----------------+                       +---------------+

其實我們要做的就是圖中 微信服務器把用戶消息轉到我們的自有服務器(虛線返回部分) 后的處理過程。

服務端驗證

在微信接入開始有一個 "服務器驗證" 的過程,這一步其實就是 微信服務器我們服務器 發起一個請求(上圖實線部分),傳了一個名稱為 echostr 的字符串過來,我們只需要原樣返回就好了。

作為開發者,你應該知道,微信后臺只能填寫一個服務器地址,所以 服務器驗證消息的接收與回復,都在這一個鏈接內完成交互。

考慮到這些,我們已經把驗證這一步給封裝到 SDK 里了,你可以完全忽略這一步。

下面我們來配置一個基本的服務端,這里假設我們自己的服務器域名叫 easyswoolewechat.com,并且我們在服務端已經安裝好了一個 EasySwoole 框架,或者我們在服務器上準備一個文件 server.php(使用原生 Swoole 實現,下文只提供偽代碼)。

使用 EasySwoole 框架配置服務端驗證

以下為了演示,我們只在 App\HttpController\Index 控制器類下進行編碼實現配置服務端驗證,用戶可自行選擇其他控制器類進行編碼實現。

在服務器的 EasySwoole 框架的 HTTP 服務的 控制器 中來配置一個基本的服務端:

配置主服務為 HTTP 服務,然后我們可以在 App\HttpController\Index 控制器類下編寫 server 方法,編寫如下代碼實現服務端驗證:

<?php

namespace App\HttpController;

use EasySwoole\Http\AbstractInterface\Controller;
use EasySwoole\WeChat\Factory;

class Index extends Controller
{
    public function server()
    {
        $config = [
            // 微信公眾平臺后臺的 appid
            'appId' => 'wxefe41fdeexxxxxx',

            // 微信公眾平臺后臺配置的 Token
            'token' => 'dczmnau31ea9nzcnxxxxxxxxx',

            // 微信公眾平臺后臺配置的 EncodingAESKey
            'aesKey' => 'easyswoole'
        ];

        $officialAccount = Factory::officialAccount($config);

        $server = $officialAccount->server;

        /** @var \Psr\Http\Message\ServerRequestInterface $psr7Request */
        $psr7Request = $this->request();

        /**
         * @var \Psr\Http\Message\ResponseInterface $replyResponse
         * forceValidate() 表示啟用請求驗證,以確保請求來自微信發送。默認不啟用驗證
         * serve() 會解析本次請求后回調之前注冊的事件(包括 AES 解密和解析 XML)
         * serve() 接受一個顯式實現了 \Psr\Http\Message\ServerRequestInterface 的 request 對象
         */
        $replyResponse = $server->forceValidate()->serve($psr7Request);

        /**
         * $replyResponse 是一個顯式實現了 PSR-7 的對象,用戶只需要處理該對象即可正確響應給微信
         * 下面是一個使用 EasySwoole 的響應方法
         */
        $this->response()->withStatus($replyResponse->getStatusCode());

        /**
         * PSR-7 的 Header 并不是單純的 k => v 結構
         */
        foreach ($replyResponse->getHeaders() as $name => $values) {
            $this->response()->withHeader($name, implode(", ", $values));
        }

        $this->response()->write($replyResponse->getBody()->__toString());
    }
}

使用原生 Swoole 配置服務端驗證

server.php 的實現形式我就以原生 Swoolehttp_server 來啟動一個服務,偽代碼內容如下:

<?php

use EasySwoole\WeChat\Factory;

require_once __DIR__ . '/vendor/autoload.php';

$http = new Swoole\Http\Server('0.0.0.0', 9501);

$http->on('request', function (\Swoole\Http\Request $request, \Swoole\Http\Response $response) {

    $config = [
        // 微信公眾平臺后臺的 appid
        'appId' => 'wxefe41fdeexxxxxx',

        // 微信公眾平臺后臺配置的 Token
        'token' => 'dczmnau31ea9nzcnxxxxxxxxx',

        // 微信公眾平臺后臺配置的 EncodingAESKey
        'aesKey' => 'easyswoole'
    ];

    $officialAccount = Factory::officialAccount($config);

    $server = $officialAccount->server;

    // 此處為實現了 \Psr\Http\Message\ServerRequestInterface 的 request 對象
    /** @var \Psr\Http\Message\ServerRequestInterface $psr7Request  */
    $psr7Request = new XxxReuest($request); // 偽代碼

    /**
     * @var \Psr\Http\Message\ResponseInterface $replyResponse
     * forceValidate() 表示啟用請求驗證,以確保請求來自微信發送。默認不啟用驗證
     * serve() 會解析本次請求后回調之前注冊的事件(包括 AES 解密和解析 XML)
     * serve() 接受一個顯式實現了 \Psr\Http\Message\ServerRequestInterface 的 request 對象
     */
    $replyResponse = $server->forceValidate()->serve($psr7Request);

    /**
     * $replyResponse 是一個顯式實現了 PSR-7 的對象,用戶只需要處理該對象即可正確響應給微信
     * 下面是一個原生 swoole 的響應方法
     */
    $response->status($replyResponse->getStatusCode());

    /**
     * PSR-7 的 Header 并不是單純的 k => v 結構
     */
    foreach ($replyResponse->getHeaders() as $name => $values) {
        $response->header($name, implode(", ", $values));
    }

    // 將響應輸出到客戶端
    $response->write($replyResponse->getBody()->__toString());
});

$http->start();

上述 $psr7Request 請用戶參考 PSR-7 標準自行實現 Psr\Http\Message\ServerRequestInterface 接口。

注意:安全模式下請一定要配置 aesKey

很簡單,一個服務端帶驗證功能的代碼已經完成,當然我們沒有對消息做處理,別著急,后面我們再講。

我們先來分析上面的代碼:

<?php

// 引入我們的主項目工廠類
use EasySwoole\WeChat\Factory;

// 一些配置
$config = [...];

// 使用配置來初始化一個公眾號應用實例
$officialAccount = Factory::officialAccount($config);

// 得到一個 Server\Guard $server 實例
$server = $officialAccount->server;

// 構造 實現了 \Psr\Http\Message\ServerRequestInterface 的 request 對象
// 此處為實現了 \Psr\Http\Message\ServerRequestInterface 的 request 對象
/** @var \Psr\Http\Message\ServerRequestInterface $psr7Request  */
$psr7Request = new XxxReuest($request); // 偽代碼

// 得到一個實現了 `Psr\Http\Message\ResponseInterface` 接口的 response 響應實例對象
$replyReponse = $server->forceValidate()->serve($psr7Request);

### 構建 Swoole 響應給到客戶端
// 設置響應 HTTP 狀態碼
$response->status($replyResponse->getStatusCode());
// 設置響應頭 Header
foreach ($replyResponse->getHeaders() as $name => $values) {
    $response->header($name, implode(", ", $values));
}
// 將響應輸出到客戶端
$response->write($replyResponse->getBody()->__toString());

最后這一行我有必要詳細講一下:

  • 我們的 $server->forceValidate()->serve($psr7Request); 就是執行服務端業務了,那么它的返回值是一個實現了 Psr\Http\Message\ResponseInterface 接口的實例對象。
  • 我這里是直接調用了 Swoole 原生的響應方法 write()。在一些的 Swoole 相關的框架中,你可以直接拿到 $replyResponse 實例對象進行相關的操作,然后輸出到客戶端即可。在 EasySwoole 中,可以直接使用上文示例的方法操作即可輸出到客戶端。

OK,有了上面的代碼,那么請你按 微信官方的接入指引 在公眾號后臺完成配置并啟用,并相應修改上面的 $config 的相關配置。

URL 就是我們的 http://easyswoolewechat.com/server,這里我是舉例哦,你可不要填寫我的域名。由于我使用的是 Swoole9501 端口提供服務,請用戶自行進行反向代理配置,具體如何配置反向代理請看 EasySwoole 反向代理

請一定要將微信后臺的開發者模式 ”啟用” !!!!!!看到紅色 “停用” 才真正的是啟用了。最后,請不要用瀏覽器訪問這個地址,它是給微信服務器訪問的,不是給人訪問的。

接收 & 回復用戶消息

上述完成服務端驗證通過后,接下來我們就來試一下接收消息吧。

在剛剛上文代碼最后一行使用 $this->response()->write($replyResponse->getBody()->__toString()); (在 EasySwoole 框架中響應) 或 使用 $response->write($replyResponse->getBody()->__toString()); (原生 Swoole 響應); 在前面,現在我們調用 $officialAccount->serverpush() 方法來注冊一個消息處理器,這里用到了 PHP 閉包 的知識,如果你不熟悉趕緊補課去。

EasySwooleApp\HttpController\Index.php 實現:

<?php

namespace App\HttpController;

use EasySwoole\Http\AbstractInterface\Controller;
use EasySwoole\WeChat\Factory;

class Index extends Controller
{

    public function server()
    {
        // 這里省略 

        $server = $officialAccount->server;

        /** 注冊消息事件回調 */
        $server->push(function (\EasySwoole\WeChat\Kernel\Contracts\MessageInterface $message) {
            return new \EasySwoole\WeChat\Kernel\Messages\Text("您好!歡迎使用 EasySwoole WeChat!");
        });

        $psr7Request = $this->request();
        /** @var \Psr\Http\Message\ResponseInterface $replyResponse */
        $replyResponse = $server->forceValidate()->serve($psr7Request);

        $this->response()->withStatus($replyResponse->getStatusCode());
        foreach ($replyResponse->getHeaders() as $name => $values) {
            $this->response()->withHeader($name, implode(", ", $values));
        }

        // 將響應輸出到客戶端
        $this->response()->write($replyResponse->getBody()->__toString());
    }
}

原生 Swoole 中單獨實現 server.php

<?php

use EasySwoole\WeChat\Factory;

require_once __DIR__ . '/vendor/autoload.php';

// 這里省略

$http->on('request', function (\Swoole\Http\Request $request, \Swoole\Http\Response $response) {

    // 這里省略

    $server = $officialAccount->server;

    /** 注冊消息事件回調 */
    $server->push(function (\EasySwoole\WeChat\Kernel\Contracts\MessageInterface $message) {
        return new \EasySwoole\WeChat\Kernel\Messages\Text("您好!歡迎使用 EasySwoole WeChat!");
    });

    /** @var \Psr\Http\Message\ServerRequestInterface $psr7Request  */
    $psr7Request = new XxxReuest($request); // 偽代碼

    $replyResponse = $server->forceValidate()->serve($psr7Request);
    $response->status($replyResponse->getStatusCode());
    foreach ($replyResponse->getHeaders() as $name => $values) {
        $response->header($name, implode(", ", $values));
    }

    // 將響應輸出
    $response->write($replyResponse->getBody()->__toString());
});

// 這里省略

OK,打開你的微信客戶端,向你的公眾號發送任意一條消息,你應該會收到回復:您好!歡迎使用 EasySwoole WeChat!

如果您沒有收到回復,但是看到了 “你的公眾號暫時無法提供服務”,好,那檢查一下你的日志吧,日志在哪兒?我們的配置里寫了日志路徑了(sys_get_temp_dir() . '/wechat.log')。沒有這個文件?看看權限。

一個基本的服務端驗證就完成了。

總結

所有的應用服務都通過主入口 EasySwoole\WeChat\Factory 類來創建:

<?php

use EasySwoole\WeChat\Factory;

// 公眾號
$officialAccount = Factory::officialAccount($config);

// 小程序
$miniProgram = Factory::miniProgram($config);

// 開放平臺
$openPlatform = Factory::openPlatform($config);

// 企業微信
$work = Factory::work($config);

最后

希望您在使用本 SDK 的時候如果您發現 SDK 的不足,歡迎提交 PR 或者給我們 提建議 & 報告問題

亚洲精品成人_精品成人一区_999视频在线播放_免费黄色在线_亚洲成人久久久_久久www免费视频
  • <kbd id="eqi2k"><code id="eqi2k"></code></kbd><cite id="eqi2k"><tbody id="eqi2k"></tbody></cite>
    精品一区在线播放| 深夜福利成人| 久久婷婷国产综合尤物精品| 亚洲欧美视频一区二区三区| 亚洲在线不卡| 国模精品一区二区三区| 午夜精品亚洲一区二区三区嫩草| 婷婷亚洲婷婷综合色香五月| 国内久久视频| av成人免费观看| 手机看片福利永久国产日韩| 在线看片成人| 极品日韩久久| 欧美女人交a| 久久精品动漫| 一本色道久久综合亚洲精品婷婷| 一区二区黄色| 鲁鲁狠狠狠7777一区二区| 亚洲午夜在线观看| 午夜在线视频一区二区区别| 久久大片网站| 黄色亚洲在线| 开心色怡人综合网站| 欧美日韩在线不卡一区| 国产自产精品| 亚洲毛片网站| 亚洲成人精品电影在线观看| 中文精品视频| 亚洲一区不卡在线| 国产精品v欧美精品∨日韩| 一区二区不卡在线视频 午夜欧美不卡' | 亚洲欧洲日本国产| 奶水喷射视频一区| 欧美日韩亚洲一区在线观看| 国产精品国产亚洲精品看不卡15| 欧美日一区二区三区在线观看国产免| 国产九色91| 免费视频久久| 国产精品v欧美精品v日韩| 精品日本一区二区| 久久免费99精品久久久久久| 在线视频不卡一区二区| 久久精品国产精品国产精品污| 日韩一级在线| 亚洲一区美女| 欧美一区二视频在线免费观看| 校园激情久久| 亚洲高清资源| 午夜久久资源| 五月婷婷综合色| 欧美一区亚洲二区| 国产 高清 精品 在线 a| 91久久久久| 欧美日韩在线精品| 在线观看欧美激情| 亚洲黄色成人久久久| 鲁片一区二区三区| 国内精品视频免费| 久久精品日产第一区二区三区乱码 | 欧美aⅴ99久久黑人专区| 日韩wuma| 日韩欧美一区二区三区四区| 国产亚洲福利社区| 国产精品久久久久久久久久直播 | 久久亚洲精品欧美| 亚洲免费在线| 亚洲欧美日韩专区| 国产精品乱码| 美女精品在线| 久久久久久久波多野高潮日日| 一区二区动漫| 免费亚洲婷婷| 97netav| 成人动漫在线视频| 国产精品亚洲综合| 国产一区二区高清视频| 精品乱码一区二区三区| 免费久久一级欧美特大黄| 欧美一区二区三区在线播放| 四虎一区二区| 国内精品美女在线观看| 亚洲精品孕妇| 久久精品在线| 精品欧美一区二区精品久久| 日本一区二区三区四区在线观看 | 麻豆一区区三区四区产品精品蜜桃| 国产精品免费在线播放| 精品网站在线看| 欧美日韩大片一区二区三区| 亚洲图片都市激情| 亚洲欧洲日本mm| 久久亚洲一区二区| 麻豆91av| 激情久久久久久久| 91久久国产综合久久蜜月精品| 国产日韩一区欧美| 伊人狠狠色丁香综合尤物| 国模精品一区二区三区| 性伦欧美刺激片在线观看| 精品国产免费人成电影在线观...| 久久久久久久有限公司| 欧美国产日本| 久热这里只精品99re8久| 极品校花啪啪激情久久| 伊人久久大香线蕉精品| 国产精品一区二区欧美| 国产精品视频入口| 午夜精品影院| 成人欧美一区二区三区在线观看| 日韩中文字幕av在线| 99亚洲伊人久久精品影院红桃| dy888夜精品国产专区| 亚洲乱码国产乱码精品天美传媒| 亚洲国产精品第一区二区| 国产精品乱子乱xxxx| 中文字幕日韩一区二区三区| 国产农村妇女精品一区二区| 欧美自拍资源在线| 亚洲综合欧美日韩| 这里只有精品66| 99影视tv| 亚洲高清在线播放| 日本精品免费| 久久人人97超碰国产公开结果| 先锋影音欧美| 国产乱码精品一区二区三区卡 | 日本免费高清一区二区| 一区二区高清视频| 亚洲欧洲国产精品久久| 成人9ⅰ免费影视网站| 亚洲午夜精品久久| 欧洲久久久久久| 午夜在线精品偷拍| 欧美三级不卡| 五月天色一区| dy888夜精品国产专区| 伊人久久亚洲美女图片| 欧美日韩在线精品| 狼狼综合久久久久综合网| 欧美午夜视频在线| 亚洲电影网站| 精品国产中文字幕| 久久久蜜桃一区二区人| 亚洲国产精品久久久久婷婷老年 | 国内一区在线| 久久综合导航| 中文精品在线| 亚洲国产婷婷香蕉久久久久久99| 日本一区视频在线观看| 国产美女精品在线观看| 久久资源av| 亚洲欧美日本视频在线观看| 中文字幕中文字幕99| 欧美精品一区三区在线观看| 97国产超碰| caoporen国产精品| 91免费看网站| 久久亚洲高清| 久久中文在线| 99在线视频首页| 免费看的黄色欧美网站| 国产亚洲欧美一区二区| 99精品国产一区二区青青牛奶| 黄色成人在线网址| 国产一区二区三区无遮挡| 一本久久a久久精品vr综合 | 精品国产乱码久久久久久88av | 亚洲一区二三| 国产亚洲网站| 免费看的黄色欧美网站| 欧美专区一区二区三区| 麻豆成人av| 裸体一区二区| 99re在线| 国产乱码精品一区二区三区卡| 国产精品国产精品国产专区蜜臀ah | 国产精品普通话对白| 亚洲精品一二| 欧美一级播放| 成人动漫视频在线观看免费| 国产伦精品一区二区三区四区视频| 99免费在线观看视频| 精品国产免费一区二区三区| 欧美一区二区三区四区在线观看地址| 日本高清不卡一区二区三| 亚洲欧洲日韩综合二区| 国产一区免费视频| 国产一区二区你懂的| 国产69精品久久久久9999apgf| 国内外成人免费视频| 一区一区视频| 亚洲一区黄色| 精品欧美一区二区久久久伦| 午夜精品视频在线观看一区二区| 欧美日韩视频一区二区三区| 国产精品一区二区三区四区五区| 国产精品手机在线| 欧美日韩国内| 91精品国产综合久久久久久丝袜| 国产欧美亚洲日本|