使用 composer(注意:他会自动检索该目录下的composer.json,请确认好安装目录):php
$ composer require overtrue/wechat:~3.1 -vvv
EasyWeChat 是一个通用的 Composer 包,因此不须要对框架单独作修改,只要支持 Composer 就能直接使用,固然了,为了更方便的使用,咱们收集了如下框架单独提供的拓展包:html
我这里使用的是laravel,安装好后路径是这样的laravel
use EasyWeChat\Foundation\Application; $options = [ // ... ]; $app = new Application($options);
下面这里是配置的完整列表:git
<?php return [ /** * Debug 模式,bool 值:true/false * * 当值为 false 时,全部的日志都不会记录 */ 'debug' => true, /** * 帐号基本信息,请从微信公众平台/开放平台获取 */ 'app_id' => 'your-app-id', // AppID 'secret' => 'your-app-secret', // AppSecret 'token' => 'your-token', // Token 'aes_key' => '', // EncodingAESKey,安全模式下请必定要填写!!! /** * 日志配置 * * level: 日志级别, 可选为: * debug/info/notice/warning/error/critical/alert/emergency * file:日志文件位置(绝对路径!!!),要求可写权限 */ 'log' => [ 'level' => 'debug', 'file' => '/tmp/easywechat.log', ], /** * OAuth 配置 * * scopes:公众平台(snsapi_userinfo / snsapi_base),开放平台:snsapi_login * callback:OAuth受权完成后的回调页地址 */ 'oauth' => [ 'scopes' => ['snsapi_userinfo'], 'callback' => '/examples/oauth_callback.php', ], /** * 微信支付 */ 'payment' => [ 'merchant_id' => 'your-mch-id', 'key' => 'key-for-signature', 'cert_path' => 'path/to/your/cert.pem', // XXX: 绝对路径!!!! 'key_path' => 'path/to/your/key', // XXX: 绝对路径!!!! // 'device_info' => '013467007045764', // 'sub_app_id' => '', // 'sub_merchant_id' => '', // ... ], /** * Guzzle 全局设置 * * 更多请参考: http://docs.guzzlephp.org/en/latest/request-options.html */ 'guzzle' => [ 'timeout' => 3.0, // 超时时间(秒) //'verify' => false, // 关掉 SSL 认证(强烈不建议!!!) ], ];
在微信公众平台开发的道路上,遍及着各类大大小小的坑,有的人掉坑里,几经折腾又爬出来了,而后拍拍屁股走人。然而坑还在那里,还会继续有后来人掉进去……github
这,是咱们不肯看到的。apache
因此在这里,咱们将陆续将微信开发中可能遇到的各类疑难问题进行汇总,并给出对应的解决办法。通常状况下,这些问题均可以对号入座,轻松地解决。但也不排除特殊状况,这时候你遇到的问题与文中某一个症状一致,但文中所给的解决方案并不凑效,这种状况下就须要发挥你本身的智慧,去……折腾了……json
咱们期待这一版块为各位的开发带来便利,同时也但愿各位本着开源、分享的精神对其进行补充和完善,将各类坑一一填小、填平,让微信开发变得不那么痛苦,甚至,变成一件快乐的事……ubuntu
date
能够在服务器上查看当前时间,若是发现时区不对则须要修改时区:Setting The Correct Timezone In CentOS And Ubuntu Servers With NTP
这是 SSL 证书问题所致,在使用 SDK 调用微信支付等相关的操做时可能会遇到报 “SSL certificate problem: unable to get local issuer certificate” 的错误。centos
微信公众平台提供的文档中建议对部分较敏感的操做接口使用 https 协议进行访问,例如微信支付和红包等接口中涉及到操做商户资金的一些操做。
wechat SDK 遵循了官方建议,因此在调用这些接口时,除了按照官方文档设置操做证书文件外,还须要保证服务器正确安装了 CA 证书。api
下载 CA 证书
你能够从 http://curl.haxx.se/ca/cacert.pem 下载 或者 使用微信官方提供的证书中的 CA 证书 rootca.pem
也是一样的效果。
在 php.ini
中配置 CA 证书
只须要将上面下载好的 CA 证书放置到您的服务器上某个位置,而后修改 php.ini
的 curl.cainfo
为该路径(绝对路径!),重启 php-fpm
服务便可。
curl.cainfo = /path/to/downloaded/cacert.pem
注意证书文件路径为绝对路径!以本身实际状况为准。
其它修改 HTTP 类源文件的方式是不容许的。
目前在 OSX 下,发现使用 HomeBrew 装的 PHP 7.0 有这个问题,解决方案是从新 brew 安装 PHP:
$ brew install homebrew/php/php70 --with-homebrew-openssl --with-homebrew-curl --without-snmp -vvv
验证:
$ php -i | grep 'OpenSSL support' OpenSSL support => enabled OpenSSL support => enabled
公众号可添加3个支付受权目录,知足不一样应用使用同一个公众号进行支付的业务需求。
正确的【支付受权目录】应以 http://
或 https://
开头,并以正斜杠 /
结尾,受权目录所包含的域名必须通过 ICP 备案。
支付受权目录需细化至二级或三级目录。
全部实际调起微信支付请求的页面都必需要所配置的支付受权目录之下。
在开发过程当中,也可使用测试受权目录进行开发测试,此时还应该将参与测试的我的微信号添加到测试白名单中,不然将出现对应的错误提示……
配置前请先理解页面、目录、URL 以及域名等几个基本概念,并对本身所使用的框架的路由机制有一个大体了解。这样你才会知道本身正在配置的参数是个啥玩意儿,有什么卵用……
这是因为程序使用了网页受权而公众号没有正确配置【网页受权域名】所致。此时你须要登陆微信公众平台,在【开发】->【接口权限】页面找到网页受权获取用户基本信息进行配置并保存。
网页受权域名应该为经过 ICP 备案的有效域名,不然保存时没法经过安全监测。
网页受权域名即程序完成受权得到受权 code 后跳转到的页面的域名,通常状况下为你的业务域名。
网页受权域名配置成功后会当即生效。
公众号的网页受权域名只可配置一个,请合理规划你的业务,不然你会发现……受权域名不够用哈。
在使用 JS-SDK 进行开发时,每一个页面都须要调用 wx.config() 方法配置 JSPAI 参数。若是没有正确配置 JSAPI 安全域名而且开启了调试模式,此时就报此错误。遇到这个问题时,开发者须要登陆微信公众平台,进入【公众号设置】->【功能设置】页面,将项目所使用的域名添加至 【JSAPI 安全域名】列表中。
一个公众号同时最多可绑定三个安全域名,而且这些域名必须为经过 ICP 备案的一级或一级以上的有效域名。
JSAPI 安全域名每月限修改三次,修改任何一个都算,因此,请谨慎操做。
若是须要使用 JSAPI 调起支付功能,则支付目录必须也在所配置的安全域名之下,而且须要将支付目录添加至支付受权目录。
相信对接公众号通常是微信开发者进行开发过程当中最早进行的工做,而在这看似简单的配置操做中,也可能会掉坑里。
最多见的两种状况就以下:
确认你 “启用” 了开发模式, token 验证经过不表明启用,保存后也不表明启用。看到红色 “停用” 才真正的是启用了。
配置好URL(服务器地址)以及Token(令牌)后,点击保存时提示token验证失败,出现这种状况的缘由有多种,其中之一即是网络不稳定,因此可尝试屡次保存,若始终没法经过再排查其它可能因素。
配置保存成功以后,向公众号发送消息无任何反应,本身的消息处理程序也没有被调用的记录(无对应日志)。这种状况下若是你尝试反复停用和启用服务器配置,可能忽然间惊奇地了现,问题莫名其妙的解决了。
使用在线调试工具的消息接口,http://mp.weixin.qq.com/debug/, 只要返回绿色的“请求成功”,就表明你的代码没有问题,请重复上面第4项再测试。
若是你在用什么本地开发工具,或者什么 ngrok 代理到本机这样的开发方式,那么失败就很正常了,微信服务器到你机器的网络延迟太大(仍是用服务器开发吧)。
请开发者理解服务器 TOKEN 验证原理(官方文档有说明)并谨记服务器验证时使用 GET 方式访问,而公众平台向你的服务器发送消息/数据则使用 POST 方式,因此服务器验证成功以后,在某些启用了 CSRF 验证的框架里,接收消息时可能还会遇到 CSRF 相关的问题,请根据本身项目实际状况进行排查。
另外有的朋友的 Laravel 里使用了 laravel-debugbar,这个组件的原理是在页面输出时在后面添加 HTML 来实现的,因此它会改变咱们返回给微信的内容,此时要么卸载,要么禁用掉它。
在使用了 Xdebug 的环境下可能出现这个问题。这是因为 Xdebug 限制函数嵌套的最大层级数(默认为100),当嵌套次数达到该值便会触发 Xdebug 跳出嵌套并报此错误。
为避免这个问题,能够将 Xdebug 的 max_nesting_level 参数适当设置大一些,一般设置为200就能够了(固然可根据本身实际状况设置为更大的值)。
以下,修改 php.ini 配置文件后,重启 Apache 或 php-fpm 服务便可。
xdebug.max_nesting_level=200