最近需要开发一个微信公众号,服务端用的是Bmob,Bmob也提供了云端代码开发微信,但只能使用JS语法,不够灵活 。于是准备用PHP来开发。ThinkPHP是国内最普及的PHP开发框架。(没有使用过的朋友可以去官网了解一下,上手很快)

ThinkPHP的使用者还为微信公众号开发了配套的SDK,使用很方便,例如只需调用$wechat->reply(“回复内容”);即可回复公众号信息。

闲话不多说,接下来我们看一下怎么用ThinkPHP三步开发微信公众账号。

所需下载文件:

  1. 微信ThinkPHP开发包  这是ThinkPHP网友开发的微信扩展包,不光可以用ThinkPHP开发,只要是PHP都可以。Github地址:https://github.com/gaoming13/wechat-php-sdk

已完成的功能模块

Wechat (处理自动接入、获取与回复微信消息)(使用说明)

Api (处理需要access_token的主动接口)(使用说明)

  1.  ThinkPHP完整包

  2. ** Bmob PHP SDK **(只需要其中的lib目录下文件) Github地址

开发步骤:(以下有必要ThinkPHP简称TP)

一:将wechat-php-sdk内 src 文件夹重命名为 Gaoming13, 拷贝至 ThinkPHP/Library/ 下。(文件内有Gaoming13命名空间,可以自行修改,建议不要修改,尊重作者劳动成果)

二:在TP默认的IndexController中调用以下代码,具体appid等值需自行配置。(详细代码件wechat-php-sdk/demo/demo_thinkPHP.php文件)

// 开发者中心-配置项-AppID(应用ID)
$appId = 'wx733d7f24bd29224a';
// 开发者中心-配置项-AppSecret(应用密钥)
$appSecret = 'c6d165c5785226806f42440e376a410e';
// 开发者中心-配置项-服务器配置-Token(令牌)
$token = 'gaoming13';
// 开发者中心-配置项-服务器配置-EncodingAESKey(消息加解密密钥)
$encodingAESKey = '072vHYArTp33eFwznlSvTRvuyOTe5YME1vxSoyZbzaV';

// wechat模块 - 处理用户发送的消息和回复消息
$wechat = new \Gaoming13\WechatPhpSdk\Wechat(array(
'appId' => $appId,
'token' => $token,
'encodingAESKey' => $encodingAESKey //可选
));
// api模块 - 包含各种系统主动发起的功能
$api = new \Gaoming13\WechatPhpSdk\Api(
array(
'appId' => $appId,
'appSecret' => $appSecret,
'get_access_token' => function(){
// 用户需要自己实现access_token的返回
return S('wechat_token');
},
'save_access_token' => function($token) {
// 用户需要自己实现access_token的保存
S('wechat_token', $token);
}
)
);

// 获取微信消息
$msg = $wechat->serve();

// 回复文本消息
if ($msg->MsgType == 'text' && $msg->Content == '你好') {
$wechat->reply("你也好! - 这是我回复的额!");
} else {
$wechat->reply("听不懂! - 这是我回复的额!");
}

// 主动发送
$api->send($msg->FromUserName, '这是我主动发送的一条消息');

三、使用Bmob PHPSDK

将下载好的SDK下lib目录修改为Bmob,然后复制到ThinkPHP/Library/ 下,并且将里面的每个.class.php文件前加上命名空间:namespace Bmob;(这是TP3.2的要求,之前的版本可忽略此修改)不想麻烦的同学点这里下载修改好的文件

修改BmobConfig.class.php,填写AppID和SecretKey信息。如下:

class BmobConfig{
const APPID = ''; //替换后台"应用密钥"中的Application ID
const RESTKEY = ''; //后台"应用密钥"中的REST API Key
const BMOBURL = 'https://api.bmob.cn/1/'; //保持不变
}

注意在TP的Controller中调用时要加命名空间信息:

use Bmob\BmobUser;
use Bmob\BmobObject;

然后通过以下代码获取数据,再用上一步的方法返回给微信用户即可。

$bmobObj =newBmobObject(“GameScore”);

$res=$bmobObj->get();// 获取所有GameScore对象

具体操作Bmob数据方法见Bmob官方文档

注意点:

中文可能会出现乱码,在Controller construct方法中加入

header("content-type:text/html;charset=utf-8");

即可