GithubHelp home page GithubHelp logo

wechat-php-sdk's Introduction

微信公众平台 PHP SDK

介绍

简单的微信公众平台 PHP SDK ,通过调用相应的接口,使你可以轻松地开发微信 App 。测试方法如下:

  1. Clone 或下载项目源码,上传至服务器。

  2. 进入微信公众平台,高级功能,开启开发模式,并设置接口配置信息。修改 URL/example/server.php 的实际位置,修改 Tokenweixin (可自行在 /example/server.php 中更改)。

  3. 向你的微信公众号发送消息并测试吧!

用法

直接浏览 /example/server.php 了解基本用法,以下为详细说明。

通过继承 Wechat 类进行扩展,通过重写 onSubscribe() 等方法响应关注等请求:

class MyWechat extends Wechat {
  protected function onSubscribe() {} // 用户关注
  protected function onUnsubscribe() {} // 用户取消关注

  protected function onText() {
    // 收到文本消息时触发,此处为响应代码
  }

  protected function onImage() {} // 收到图片消息
  protected function onLocation() {} // 收到地理位置消息
  protected function onLink() {} // 收到链接消息
  protected function onUnknown() {} // 收到未知类型消息
}

使用 getRequest() 可以获取本次请求中的参数(不区分大小写):

$this->getRequest();
// 无参数时,返回包含所有参数的数组

$this->getRequest('msgtype');
// 有参数且参数存在时,返回该参数的值

$this->getRequest('ghost');
// 有参数但参数不存在时,返回 NULL

所有请求均包含:

ToUserName    接收方帐号(该公众号ID)
FromUserName  发送方帐号(代表用户的唯一标识)
CreateTime    消息创建时间(时间戳)
MsgId         消息ID(64位整型)

文本消息请求:

MsgType  text
Content  文本消息内容

图片消息请求:

MsgType  image
PicUrl   图片链接

地理位置消息请求:

MsgType     location
Location_X  地理位置纬度
Location_Y  地理位置经度
Scale       地图缩放大小
Label       地理位置信息

链接消息请求:

MsgType      link
Title        消息标题
Description  消息描述
Url          消息链接

事件推送:

MsgType   event
Event     事件类型
EventKey  事件 Key 值,与自定义菜单接口中 Key 值对应

其中,事件类型 Event 的值包括以下几种:

subscribe    关注
unsubscribe  取消关注
CLICK        自定义菜单点击事件(未验证)

使用 responseText() 方法回复文本消息:

$this->responseText(
  $content,  // 消息内容
  $funcFlag  // 可选参数(默认为0),设为1时星标刚才收到的消息
);

使用 responseMusic() 方法回复音乐消息:

$this->responseMusic(
  $title,        // 音乐标题
  $description,  // 音乐描述
  $musicUrl,     // 音乐链接
  $hqMusicUrl,   // 高质量音乐链接,Wi-Fi 环境下优先使用
  $funcFlag      // 可选参数,默认为0,设为1时星标刚才收到的消息
);

使用 responseNews() 方法回复图文消息:

$this->responseNews(
  $items,    // 由单条图文消息类型 NewsResponseItem() 组成的数组
  $funcFlag  // 可选参数,默认为0,设为1时星标刚才收到的消息
)

其中单条图文消息类型 NewsResponseItem() 格式如下:

$items[] = new NewsResponseItem(
  $title,        // 图文消息标题
  $description,  // 图文消息描述
  $picUrl,       // 图片链接
  $url           // 点击图文消息跳转链接
);

最后,实例化 MyWechat() 并调用 run() 方法即可运行。

$wechat = new MyWechat(
  $token,  // 你在公众平台设置的 Token
  $debug   // 调试模式,默认为 FALSE ,设为 TRUE 后可将错误通过文本消息回复显示
);

$wechat->run();

TODO

  1. 完善文档和注释;
  2. 完善异常处理;
  3. 提供 Composer 方式安装。

wechat-php-sdk's People

Contributors

cbakgly avatar kangyue92 avatar michaelhe avatar netputer avatar undeadking avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

wechat-php-sdk's Issues

你好,验证Token不通过。

环境:SEA5.3PHP
config.php填写了$encodingAesKey、$token、$appId。
直接加载/example/server.php
显示错误:Parse error: syntax error, unexpected T_CONST, expecting T_VARIABLE in src/errorCode.php on line 21
在本地环境wamp直接加载/example/server.php显示错误同上;
SEA已经实名认证。
老师,我是新手,我需要你的帮助,万分感谢!

文本路由

目前只是简单实现了接收和发送消息,很多判断还需要使用者自行编写。

打算增加「文本路由」功能,和 MVC 框架的路由类似,采用正则匹配,符合特定规则就将关键字作为参数传过去。

一些简单的想法,欢迎讨论。

关于微信sdk语音问题

请问下您在SAE上提供的微信程序怎么处理语音信息,我已经开启了接收语音识别结果,在Wechat.php中加入了1,也定义了2,但是就是不能识别,情况是这样的3我收不到Recognition的值,怎么才能获取到。

关于验证

wechat类内构造函数你以1个数组为参数,然而你实例化时是却以4个参数传输,所以验证时一直不行,改了就好。

消息校验机制疑惑

微信开发文档上描述:
“每次开发者接收用户消息的时候,微信也都会带上前面三个参数(signature、timestamp、nonce)访问开发者设置的URL,开发者依然通过对签名的效验判断此条消息的真实性。效验方式与首次提交验证申请一致。”
这个不是很好理解。微信后面的消息,都是POST消息。而一开始的验证消息是GET消息。后面的微信发过来的消息中,是怎么带这几个验证参数的?

用现在的SDK,每次通过微信提供的页面调试接口调试,都是返回签名校验失败,修成如下的形式就OK。
if ($this->isValid()) {
if (!$this->validateSignature($token)) {
exit('签名验证失败');
}
// 网址接入验证
exit($_GET['echostr']);
}

加密模块Bug

errorCode.php 请依照微信官方实例代码添加 static,否则会出现如下错误:

qq 20160325012211

建议修改构造函数,通过validateSignature判断消息是否合法,避免因接口URL暴露后,被恶意提交无效消息数据。

public function __construct($token, $debug = FALSE) {
if($this->validateSignature($token)){
if ($this->isValid()) {
exit($_GET['echostr']);
}

$this->debug = $debug;
set_error_handler(array(&$this, 'errorHandler'));
// 设置错误处理函数,将错误通过文本消息回复显示

$xml = (array) simplexml_load_string($GLOBALS['HTTP_RAW_POST_DATA'], 'SimpleXMLElement', LIBXML_NOCDATA);

$this->request = array_change_key_case($xml, CASE_LOWER);
// 将数组键名转换为小写,提高健壮性,减少因大小写不同而出现的问题

}
}

wechat-php-sdk 存在XXE漏洞

漏洞文件:
src/Wechat.php

漏洞原因:
调用simplexml_load_string函数未禁用实体引用,导致攻击者可以读取服务器任意文件

漏洞修复:
在所有调用simplexml_load_string函数前调用libxml_disable_entity_loader(true)禁止实体引用

漏洞证明:

报告来自:
niubl of Tencent Blade Team

自定义菜单中创建VIEW类型的链接菜单,SDK中无法执行onLink?

创建了一个自定义菜单:
{ "type":"view", "name":"主页", "url":"index.php" }
按道理在微信中点击自定义菜单中的“主页”,应该会触发onLink(),并且返回
收到了链接:index.php。但是实际上直接就跳转到了index.php?因为我想在用户点击菜单后,在onLink中获取一下FromUserName,如果是直接跳转了,就无法实现?或者是我理解不对?

建议将example代码中的单引号全都改成双引号

建议将example代码中的单引号'',全都改成双引号""。双引号中的\n之类才能被微信服务器正确解析。使用单引号的话,微信那边\n直接就显示成\n,很多emoji表情符号也直接显示代码

折腾了我老半天才发现这个问题啊....

借地方问一下地理位置功能问题

目前上报地理位置事件的功能是否只有服务号才有?

微信开发文档写的有点乱,测试下来,我的个人订阅号似乎实现不了这个,但微信开发文档上一个地方说这个功能我已获得,另一个地方上说必须是已认证的服务号才能有,一头雾水....

关于回复多图文

如何回复多图文? 而且我的多图文是想通过公众平台的素材管理中编辑的最新的一条多图文消息 我怎么去获取这条最新编辑的多图文消息?

微信开发公共变量问题

你好,我用你的sae框架开发微信的程序
我设置了一个公共变量$hotourl
我想实现用户先发送照片 并存储这个照片地址
所以我在onImage里面 给这个公共变量赋值
然后当我在ontext也就是当用户下次发送文字信息时
我想检测这个变量是否赋值 然后回复消息

现在的问题是在发送图片后再发送信息 没有检测到变量被赋值 这怎么解决

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.