Arrière-plan
Le programme de compte public thinkphp WeChat appelle activement l'interface WeChat et a besoin d'un access_token, et Vous devez envoyer de manière proactive une demande pour configurer le menu du compte officiel.
Pourquoi choisir GuzzleHTTP
Guzzle est un client HTTP PHP qui permet d'envoyer facilement des requêtes et de s'intégrer dans nos services WEB.
接口简单:构建查询语句、POST请求、分流上传下载大文件、使用HTTP cookies、上传JSON数据等等。 发送同步或异步的请求均使用相同的接口。 使用PSR-7接口来请求、响应、分流,允许你使用其他兼容的PSR-7类库与Guzzle共同开发。 抽象了底层的HTTP传输,允许你改变环境以及其他的代码,如:对cURL与PHP的流或socket并非重度依赖,非阻塞事件循环。 中间件系统允许你创建构成客户端行为。
Documentation chinoise de Guzzle : https://guzzle-cn.readthedocs.io/zh_CN/latest/
Installer GuzzleHTTP
1 Installer composerParce que thinkphp6 utilise composer pour install , donc composer a été installé dans mon environnement et la méthode d'installation de composer est ignorée ici. Veuillez utiliser Baidu si nécessaire.
2. Installez Guzzle
Entrez dans le répertoire du projet tp
cd /Applications/XAMPP/htdocs/tp1/tp
Exécutez la commande d'installation
composer require guzzlehttp/guzzle
extension=php_openssl.dll
send http get dans le php. ini document Code
1. Introduisez GuzzleHttp
use GuzzleHttp\Client; use GuzzleHttp\Exception\GuzzleException;
2 dans le contrôleur L'exemple de programme suivant utilise HTTP GET dans tp6 pour obtenir le jeton d'accès de la plateforme publique WeChat
//微信公众平台获取access token url $url = 'https://api.weixin.qq.com/cgi-bin/token?'; //获取access token时需要携带的参数 $params = array( 'grant_type' => 'client_credential', 'appid' => config('app.WECHAT.APPID'), 'secret' => config('app.WECHAT.SECRET') ); $resp = null; try { //使用GuzzleHTTP发送get请求 $client = new Client(); $resp = $client->request('GET', $url.http_build_query($params)); } catch (GuzzleException $e){ print($e); } if (empty($resp)) { return null; } //获取微信公众平台的response $data = json_decode($resp->getBody(), true); if (isset($data['errcode']) && $data['errcode'] != 0) { throw new \think\Exception ($data['errmsg'], $data['errcode']); }
/** * 创建自定义菜单 */ public function menu() { require __DIR__ . '/../../vendor/autoload.php'; //构建HTTP post JSON body数据 $data = array( 'button' => array( array( 'type' => 'click', 'name' => '主菜单1', 'sub_button' => array( array( 'type' => 'click', 'name' => '子菜单1', 'key' => self::MENU_MAIN_1_CHILD_1 ), array( 'type' => 'view', 'name' => '百度', 'url' => 'https://www.baidu.com' ) ) ), array( 'type' => 'click', 'name' => '主菜单2', 'sub_button' => array( array( 'type' => 'click', 'name' => '子菜单1', 'key' => self::MENU_MAIN_2_CHILD_1 ), array( 'type' => 'view', 'name' => 'QQ', 'url' => 'http://www.qq.com' ) ) ), array( 'type' => 'click', 'name' => '主菜单3', 'key' => self::MENU_MAIN_3 ) ) ); //构造请求json body和header数据 $options = json_encode($data, JSON_UNESCAPED_UNICODE); $jsonData = [ 'body' => $options, 'headers' => ['content-type' => 'application/json'] ]; $resp = null; try { $client = new Client(); //生成微信公众号菜单需要调用的微信接口url $url = 'https://api.weixin.qq.com/cgi-bin/menu/create?access_token=' . $this->_getAccessToken(); //发送http post请求 $resp = $client->post($url, $jsonData); } catch (GuzzleException $e){ print($e); } if (empty($resp)) { return null; } echo $resp->getBody(); }