ホームページ  >  記事  >  バックエンド開発  >  PHP を使用した WeChat サービス アカウントの開発の図

PHP を使用した WeChat サービス アカウントの開発の図

小云云
小云云オリジナル
2018-02-22 09:25:182893ブラウズ

3年前にWeChatアカウントを登録していたことが判明しましたが、バックグラウンド操作を「サブスクリプションアカウント」から「サービスアカウント」に変更できませんでした。すぐにテンセントのカスタマーサービスに連絡しました。カスタマーサービスは非常に熱心でした。システムが更新されたとのことで、アップグレードできない WeChat アカウントについては、再登録のみ可能です ----「*#*(*¥)¥K30#$e)」 、再登録のみ可能です。登録から内部ニーズまで、開発の概要を説明します。 <br>

ステップ1: WeChat登録

WeChat公式アカウント公式ウェブサイト:https://mp.weixin.qq.comをクリックして登録

PHP を使用した WeChat サービス アカウントの開発の図

上の図に示すように、WeChat ID は電子メールで登録されます。各電子メール アドレスは、サービス アカウント、サブスクリプション アカウント、またはエンタープライズ アカウントの 1 種類のアカウントにのみ適用できます。

      • 基本情報

      • メールの有効化

      • タイプを選択

      • 情報登録

      • 公開アカウント情報

ここの指示に従って会社情報を入力してください。今回は認証サービス番号オプションを選択しました:

PHP を使用した WeChat サービス アカウントの開発の図

サービス番号を認証するには、300元/年を支払う必要があります。この手順は少し面倒です:財務部門からの支払いです。 、7営業日待って、請求書の郵送など。

WeChat の認証は Tencent からの公式なものではなく、クライアントの第三者によるものであることに注意してください。これは当初はまったく異なっていました。

PHP を使用した WeChat サービス アカウントの開発の図

認証完了後の認証情報は以下の通りです(中間スキャン会社の営業許可、認証契約書のスキャンと公印押印などの詳細は省略してください):

PHP を使用した WeChat サービス アカウントの開発の図

認証後のWeChat(金色のチェックマークが付いているものが今回開発したWeChat):

1 つは、WeChat の公式ドキュメント、API、およびデモのサンプル コードを確認することです。回り道をする危険性。 PHP を使用した WeChat サービス アカウントの開発の図注: 当初は人気のある WeChat 開発の本を何冊か読むつもりでしたが、時間の都合で断念しました。 PHP を使用した WeChat サービス アカウントの開発の図

WeChatバックエンドにログインし、左側の「開発者センター」をクリックすると、右側に表示される「

開発者ドキュメント

」と「

オンラインインターフェイスデバッグツール」がドキュメントとAPIですWeChat によって公式に提供される Sharp ツールは、開発プロセス中に何度も繰り返し使用されます。これら 2 つは非常に重要な情報です。

公式アカウント「Developer Center」で、後で何度も使用するAppIDとAppSecretを書き留めます。

PHP を使用した WeChat サービス アカウントの開発の図

WeChat の公式ドキュメント、まず上から下まで読んでください:

在文档的开始,微信官方就提供了PHP示例代码,下载地址。 且其明确的告之,微信公众号接口只支持80接口.

官方文档写的非常细,如获取access token是基于HTTP请求,用的是GET方式,其他的文档请直接参阅文档

access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。

http请求方式: GET
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

PHP を使用した WeChat サービス アカウントの開発の図

<br>
备注:access_token的有效时间是7200s,既需要自行做一个缓存,2小时刷新一次access_token; 我在这里用的是文件的缓存方式,添加了时间戳。
<br>

Step3:开发环境搭建

这节,我们着手搭建环境。

首先选择http://git.oschina.net 搭建源码托管环境,OSC提供了免费的私有项目,配合使用TortoiseGit-1.8.11.0-64bit,使得搭建源码托管环境非常简单。另外,其在国内访问Git速度超快(赞一个!)

接着安装软件,配置电脑开发环境:

    • Windows 8.1 64位 中文版

    • JetBrains PhpStorm 8.0.2

    • SQL Server 2008

    • PHP 5

为了方便测试,和公司网管沟通,把微信的***.gcpowertools.com.cn/ 80端口映射到我的局域网电脑。事后证明,这种本地调试方法非常高效,极大了提高了开发、调试效率。最后,为了方便调试微信数据,需要写log进行日志呈现,这里我使用的是读写文件的方式。

function writeLogBegin($msg = "begin log..............")
{
    $logFile = date('Y-m-d') . '.txt';
    $msg = date('Y-m-d H:i:s') . ' >>> ' . $msg . "\r\n";
    file_put_contents("c:\\log.txt", $msg);
}

 

Step4:微信开发

首先,结合业务特点,规划微信底部的自定义菜单。

PHP を使用した WeChat サービス アカウントの開発の図

小技巧:自定义菜单不用写代码,用微信官方自带的调试页面即可完成。

 

规划好自定义菜单后,POST JSON到微信服务器,可直接使用微信公众平台接口调试工具

PHP を使用した WeChat サービス アカウントの開発の図

保存生成的access_token, 类似如下的文本:

vU2rq8nzdXZWmcS3jO1OAZzRL5dnm3OIlsPF8ZCKHkTGfrG8f87QpwYa4mBpkTvnuy0pQJsfyq_L5xLIqPSoIBIqdsVAaKOuEgBrPpQ4

 

接着选择“自定义菜单”,输入刚才保存的access_token,输入如下的JSON字符串:

{ <br>      "button":[    <br>      {    <br>           "name":"学习中心",    <br>           "sub_button":[    <br>            {    <br>               "type":"click",    <br>               "name":"联系葡萄城",    <br>               "key":"101"    <br>            }]

「type」: "view"、"name": "最新ニュース"、"url": "<br> https://open. weixin.qq.com/connect/oauth2/authorize?appid=wx9665cf3fcdaee2f1&redirect_uri=http:// www.gcpowertools.com.cn&response_type=code&scope=snsapi_base&state=118#wechat_redirect"<br> <br> type": "view"、"name":"最新バージョン"、"url": "<br>https://open.weixin. qq.com/connect/oauth2/authorize?appid=wx9665cf3fcdaee2f1&redirect_uri=http:// www.gcpowertools.com.cn&response_type = code&scope = snsapi_base&state = 118 : "102"<br> "key": "103"<br>}<br>

「type」:「click」、「name」:「毎日のチェックイン」、「key」:「104」 「key」:「105」 「key」:「105」 「type」:「click」、「 type":"click"、"type":"click"、"name":"私の投稿"、 "key":"107 「 <br> 「url」:「<br>https: //open.weixin.qq.com/connect/oauth2/authorize? appid=wx9665cf3fcdaee2f1&redirect_uri=http://www.gcpowertools.com.cn&response_type=code&scope=snsapi_base&state=118#wechat_redirect"<br> <br><br><br><br><br><br><br><br><br> <br>注: <br>カスタム メニューを作成します <br>その後、WeChat クライアントのキャッシュのため、WeChat クライアントが表示されるまでに 24 時間かかります。テストする場合は、公開アカウントのフォローを解除してから再度フォローしてみて、作成後の効果を確認することをお勧めします。 <br><br>次に、コア機能の開発を進めます。 <br><br> WeChat サービス アカウントの中核は GCDN コミュニティを中心に展開しているため、「GCDN コミュニティ」サブメニューには 5 つの二次メニューがあり、その中には毎日のチェックイン、情報クエリ、投稿、ギフト引き換え機能があなたのアカウントにバインドされている必要があります。自分の <br>GCDN アカウント<br> GCDN アカウント。 <br><br><br><br>

依据上面的逻辑,绑定GCDN账号是前提环节,故需要开发绑定功能。 绑定功能,做了一个页面,通过a标签跳转,用户在输入用户名、密码后进行GCDN鉴权验证,验证通过存储在表:包含GCDN ID、微信的OpenID,既完成账号绑定。

PHP を使用した WeChat サービス アカウントの開発の図

后面的多个功能,通过这个表,可从微信的OpenID获得GCDN ID,继而可以使用GCDN论坛中的个人信息。

 

每日签到功能

打开论坛页面,在底部可看到目前GCDN使用的引擎较早,是Discuz!NT 3.6.711版本,故X3.1版本中时尚的签到功能是没有的。针对这个遗憾,本次微信开发做了弥补:用户可通过微信的签到完成这个功能。

PHP を使用した WeChat サービス アカウントの開発の図

 

GCDN回帖微信通知

这是另外一个特色功能:无需操作,只需要绑定GCDN账号,当你在GCDN的发帖有人回复时,会自动收到微信通知。

这个功能的开发,主要是为了还GCDNer的一个期待:在《2013年葡萄城控件用户满意度调查》,论坛用户对此类功能呼声很高,“谢谢你们的努力和尽职尽责,我希望GCDN回帖及时些,最好有及时的短信通知功能,省的我时不时的刷新GCDN页面,催促你们!”--某GCDN用户。

 

实现思路如下图所示:

PHP を使用した WeChat サービス アカウントの開発の図

 

微信通知用户,刚开始想的是文本通知,结果发现微信公众号的政策:如果用户未在24小时内主动和微信互动,则无法用文本通知用户。想到另外一个变通的办法,各大银行的余额动态通知功能。接着仔细找微信提供的功能,原来这种功能是“微信模板消息”。

PHP を使用した WeChat サービス アカウントの開発の図

 

这段文档关于微信的模板消息写的很详细:

为了保证用户不受到骚扰,在开发者出现需要主动提醒、通知用户时,才允许开发者在公众平台网站中模板消息库中选择模板,选择后获得模板ID,再根据模板ID向用户主动推送提醒、通知消息。

约花了半天时间,开发出的功能效果看起来还不错(用户是否在24小时内主动联系,均可发送模板消息),截图如下:

PHP を使用した WeChat サービス アカウントの開発の図

如想配置这个功能,通过回复文字指令。

    • 回复"取消提醒": 自动关闭微信通知提醒

    • 回复"开通提醒":自动开通微信通知提醒(需要你绑定GCDN账号)

 

上面的开发过程,用到的PHP的 curl 实现HTTP GET、POST请求的源码:

/**
 * @param $url
 * @param null $data
 * @return mixed
 */
function https_request($url, $data = null)
{
    // 模拟提交数据函数
    $curl = curl_init(); // 启动一个CURL会话
    curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 从证书中检查SSL加密算法是否存在
    curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
    curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer
    if (!empty($data)) {
        curl_setopt($curl, CURLOPT_POST, 1); // 发送一个常规的Post请求
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // Post提交的数据包
    }
    curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环
    curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回

   

    $tmpInfo = curl_exec($curl); // 执行操作
    if (curl_errno($curl)) {
        echo 'Errno' . curl_error($curl);//捕抓异常
    }
    curl_close($curl); // 关闭CURL会话
    return $tmpInfo; // 返回数据
}

 

雷区:如果你所在电脑有代理,务必添加如下代码:

   //使用网络代理begin
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
    curl_setopt($curl, CURLOPT_PROXY, '192.168.0.1');  //替换代理地址
    curl_setopt($curl, CURLOPT_PROXYPORT, '880');      //替换代理端口
    curl_setopt($curl, CURLOPT_PROXYTYPE, 'HTTP');
    curl_setopt($curl, CURLOPT_PROXYUSERPWD, 'grapecity/r:r'); //替换代理用户名
    //使用网络代理end
<br>

Step5:开发总结

  • 近2个月的开发时间,投入了约1.5人,粗略估算有3个人月开发投入。

  • 少数的几次非控件业务的研发,主要为了方便GCDN社区用户的使用,桥接微信、GCDN。

  • 选择使用PHP脚本语言不错,微信官方用PHP作为默认微信开发脚本,另外PHP开发微信的博客非常多。

  • 完整项目经验很重要:“坑才是大爱!”

坑的定义:有时候没有问题,有时候有问题。100%有问题的,不叫坑,叫bug。

  • Git利器: 协作开发,牛!

  • include_onece パスエラーの落とし穴、PHPStorm は十分なインテリジェントな認識を提供しますが、注意する必要があります。

  • include_onece パスには一重引用符を使用し、二重引用符は使用しないでください

  • チームワーク: 人々が協力すれば、山も動きます。 WeChat 機能の反復は少しずつ伝達されます。

関連する推奨事項:

springmvc 統合 jfinal WeChat WeChat サービス アカウント開発

以上がPHP を使用した WeChat サービス アカウントの開発の図の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。