首页 > 后端开发 > 正文

微信服务号php开发框架 php如何进行微信公众号开发

2023-10-04 09:36:46 | 我爱编程网

今天,我爱编程网小编为关注后端开发的同学们准备了微信服务号php开发框架 php如何进行微信公众号开发,下面一起来看一下吧。

微信服务号php开发框架 php如何进行微信公众号开发

php如何进行微信公众号开发



php如何进行微信公众号开发
1、配置相关服务器
(1) 如下,把自己的服务器ip白名单配置上;
(2) 开始配置令牌,配置令牌时先需要把现成的代码放到自己的服务器上面,代码里面包含自己的设置的令牌号码,这样才可以配置成功。
注意:下面这个代码在配置好后,即可从服务器上面删除代码或者把index.php改一个名字。
url必须是完整的url,比如
<?php
/**
* wechat php test
* update time: 20141008
*/
//define your token
//下面的即是你设置的token令牌
define("TOKEN", "zj123456");
$wechatObj = new wechatCallbackapiTest();
$wechatObj->valid();
class wechatCallbackapiTest
{
public function valid()
{
$echoStr = $_GET["echostr"];
//valid signature , option
if ($this->checkSignature()) {
echo $echoStr;
exit;
}
}
public function responseMsg()
{
//get post data, May be due to the different environments
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
//extract post data
if (!empty($postStr)) {
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$fromUsername = $postObj->FromUserName;
$toUsername = $postObj->ToUserName;
$keyword = trim($postObj->Content);
$time = time();
$textTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
<FuncFlag>0</FuncFlag>
</xml>";
if (!empty($keyword)) {
$msgType = "text";
$contentStr = "Welcome to wechat world!";
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;
} else {
echo "Input something...";
}
} else {
echo "";
exit;
}
}
private function checkSignature()
{
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$token = TOKEN;
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr, SORT_STRING);
$tmpStr = implode($tmpArr);
$tmpStr = sha1($tmpStr);
if ($tmpStr == $signature) {
return true;
} else {
return false;
}
}
}2、配置ok后,接下来就可以实现相关的微信公众号相关功能,比如说自动回复机器人。
代码包含3部分,当然,自动回复机器人,下面的代码有些用不到。
(1) 、index.php
<?php
define("APPID","xxxxxxx");
define("APPSECRET","xxxxxx");
define("TOKEN","zj123456");
require("./wechat.inc.php");
$wechat = new WeChat(APPID,APPSECRET,TOKEN);
$wechat->responseMsg();
?>(2)、wechat.inc.php
<?php
class WeChat
{
private $_appid;
private $_appsecret;
private $_token;
public function __construct($appid, $appsecret, $token)
{
$this->_appid = $appid;
$this->_appsecret = $appsecret;
$this->_token = $token;
}
/**
*_request():发出请求
*@curl:访问的URL
*@https:安全访问协议
*@method:请求的方式,默认为get
*@data:post方式请求时上传的数据
**/
private function _request($curl, $https = true, $method = 'get', $data = null, $headers = null)
{
$ch = curl_init(); //初始化
curl_setopt($ch, CURLOPT_URL, $curl); //设置访问的URL
// curl_setopt($ch, CURLOPT_HEADER, false); //设置不需要头信息
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //只获取页面内容,但不输出
if ($https) {
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //不做服务器认证
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); //不做客户端认证
}
if ($method == 'post') {
curl_setopt($ch, CURLOPT_POST, true); //设置请求是POST方式
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); //设置POST请求的数据
}
$str = curl_exec($ch); //执行访问,返回结果
curl_close($ch); //关闭curl,释放资源
return $str;
}
/**
*_getAccesstoken():获取access token
**/
private function _getAccesstoken()
{
$file = './accesstoken'; //用于保存access token
if (file_exists($file)) { //判断文件是否存在
$content = file_get_contents($file); //获取文件内容
$content = json_decode($content); //json解码
if (time() - filemtime($file) < $content->expires_in) //判断文件是否过期
{
return $content->access_token;
}
//返回access token
}
$content = $this->_request(" . $this->_appid . "&secret=" . $this->_appsecret); //获取access token的json对象
file_put_contents($file, $content); //保存json对象到指定文件
$content = json_decode($content); //进行json解码
return $content->access_token; //返回access token
}
/**
*_getTicket():获取ticket,用于以后换取二维码
*@expires_secords:二维码有效期(秒)
*@type :二维码类型(临时或永久)
*@scene:场景编号
**/
public function _getTicket($expires_secords = 604800, $type = "temp", $scene = 1)
{
if ($type == "temp") { //临时二维码的处理
$data = '{"expire_seconds":' . $expires_secords . ', "action_name": "QR_SCENE", "action_info": {"scene": {"scene_id": ' . $scene . '}}}'; //临时二维码生成所需提交数据
return $this->_request(" . $this->_getAccesstoken(), true, "post", $data, ''); //发出请求并获得ticket
} else { //永久二维码的处理
$data = '{"action_name": "QR_LIMIT_SCENE", "action_info": {"scene": {"scene_id": ' . $scene . '}}}'; //永久二维码生成所需提交数据
return $this->_request(" . $this->_getAccesstoken(), true, "post", $data, ''); //发出请求并获得ticket
}
}
/**
*_getQRCode():获取二维码
*@expires_secords:二维码有效期(秒)
*@type:二维码类型
*@scene:场景编号
**/
public function _getQRCode($expires_secords, $type, $scene)
{
$content = json_decode($this->_getTicket($expires_secords, $type, $scene)); //发出请求并获得ticket的json对象
$ticket = $content->ticket; //获取ticket
$image = $this->_request(" . urlencode($ticket)
); //发出请求获得二维码图像
//$file = "./".$type.$scene.".jpg";// 可以将生成的二维码保存到本地,便于使用
//file_put_contents($file, $image);//保存二维码
return $image;
}
public function valid() //检查安全性
{
$echoStr = $_GET["echostr"];
//valid signature , option
if ($this->checkSignature()) {
echo $echoStr;
exit;
}
}
public function responseMsg()
{
//get post data, May be due to the different environments
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //获得用户发送信息
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
switch ($postObj->MsgType) {
case 'event':
$this->_doEvent($postObj);
break;
case 'text':
$this->_doText($postObj);
break;
case 'image':
$this->_doImage($postObj);
break;
case 'voice':
$this->_doVoice($postObj);
break;
case 'video':
$this->_doVideo($postObj);
break;
case 'location':
$this->_doLocation($postObj);
break;
default:exit;
}
}
private function _doEvent($postObj)
{ //事件处理
switch ($postObj->Event) {
case 'subscribe': //订阅
$this->_doSubscribe($postObj);
break;
case 'unsubscribe': //取消订阅
$this->_doUnsubscribe($postObj);
break;
default:;
}
}
private function _doSubscribe($postObj)
{
$tpltext = '<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>';
$access_token = $this->_getAccesstoken();
$userInfo = $this->getUserinfo($access_token, $postObj->FromUserName);
$str = sprintf($tpltext, $postObj->FromUserName, $postObj->ToUserName, time(), '欢迎您关注' . 'Geroge Zhang' . '的世界!');
//还可以保存用户的信息到数据库
echo $str;
}
private function _doUnsubscribe($postObj)
{
; //把用户的信息从数据库中删除
}
private function _doText($postObj)
{
$fromUsername = $postObj->FromUserName;
$toUsername = $postObj->ToUserName;
$keyword = trim($postObj->Content);
$time = time();
$textTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
<FuncFlag>0</FuncFlag>
</xml>";
if (!empty($keyword)) {
// $data_add = "question=" . $keyword;
// $appcode = "2fd264cdc7914b308e51ab986f73fb86";
// $headers = array();
// array_push($headers, "Authorization:APPCODE " . $appcode);
// $contentStr = $this->_request("" . $data_add, false, "GET", '', $headers);
$data_add = urlencode($keyword);
$contentStr = $this->_request(";appid=0&msg=" . $data_add, false, "GET", '', '');
$contentStr = json_de

微信服务号php开发框架 php如何进行微信公众号开发

想学习微信公众平台开发需要学习那些知识呢?PHP JAVA or HTML?

微信作为现代人必备的一款的聊天软件变得越来越火爆,尤其是微信公众账号更成了人们获取资讯的重要渠道,然后对于我们开发人员来说,制作和搭建一个微信公众平台成为一个网站开发人员比较时尚的新技术,然而对于有开发经验的开发者来说,微信公众开发只不过需要三个主要技术:h5移动端网站页面、微信公众账号平台提供的开发者API、网站后台语言数据库。

1、h5移动端网站页面

H5+css3是做移动端页面的主要技术,普通的html和css只适合做PC端网站,而在移动端需要的是兼容不同设备的不同分辨率,所以还需要结合一些前端框架如bootstrap、jQuery mobile等技术来实现,要做好移动端页面的就是主要学习这些东西,当然也有很多移动端页面框架可以直接上手去使用,那些我就不说了。 我爱编程网

2、微信公众账号平台提供的开发者API

微信公众平台为开发者提供了很多的API接口,如获取微信用户的账号信息等等,这些都是需要借助官方的接口来实现的,比如我们网站的空间的页面如何在微信中显示等。也是需要借助开发文档按其要求来做。

3、网站后台语言数据库网站后台语言建议还是使用php,因为php开发起来比较简单,同时还可以的借助php的一些框架进行快速的开发,所以推荐使用php进行后台的开发,相对于Java等语言要简单的多。

总之,微信公众平台的开发是比较简单的,只要你具备普通网站的开发经验和一些移动网站页面的设计,你就能胜任微信公众平台的开发。

微信服务号php开发框架 php如何进行微信公众号开发

怎么样使用php的laravel框架快速集成微信登录

1. 安装php_weixin_provider
在项目下运行composer require thirdproviders/weixin,即可完成安装。安装成功后,在项目的vendor目录下应该能看到php_weixin_provider的库文件:
image
2. 配置微信登录的参数
一共有7个参数可以配置,分别是:
client_id:对应公众号创建的应用appid
client_secret:对应公众号创建的应用appid
redirect:对应微信授权成功后的回调地址
proxy_url:对应微信授权的代理服务地址(其作用可阅读这篇文章了解)
device:区别是PC端微信登录还是移动端微信登录,默认值为pc,如果是移动端,可设置为空
state_cookie_name:授权链接中会包含随机的state参数,这个参数在微信回调的时候会原封不动的返回来,届时可通过验证state参数是否与授权链接中传入的参数相同,来判断请求是否有效,防止CSRF攻击。这个方案,会在授权时把state参数先存到cookie里面,所以这个参数用来指定这个state参数存入的cookie名称,默认值是wx_state_cookie
state_cookie_time:指定wx_state_cookie的有效时长,默认是5分钟
这七个参数有2种设置方式。
第一种是把这些参数以大写的形式配置到.env配置文件里面:
image
注:1、每个配置项都是大写,且以WEIXIN_开头;2、前三个配置项与前面介绍的参数名称不完全一致,KEY对应client_id,SECRET对应client_secret,REDIRECT_URI对应redirect;3、其它的与前面介绍的参数名称一致。
第二种是把这些参数配置到config/services.php文件里面去:
image
这种方式的配置,每个配置项的名称与前面介绍的一致。
要注意的内容:
由于php_weixin_provider是基于laravel/socialite实现的,它要求必须配置client_id,client_secret和redirect,否则php_weixin_provider实例化过程就会出错;对于client_id和client_secret,我认为统一配置在一个地方是没有问题的,但是对于redirect,如果统一配置,不一定符合所有场景的需求,因为不是每一个用到微信登录的地方,最后的回调地址都是同一个;所以建议把redirect先配置成一个有效或无效非空的回调地址;反正在后面使用php_weixin_provider的时候还可以在调用的时候更改这个参数的值。
proxy_url如果有,也建议配置在公共的地方;
state_cookie_name和state_cookie_time由于都有默认值,基本上无需重新配置;
device可以在使用的时候再指定。
所有配置参数都可以在使用的时候重新指定。
3. 注册php_weixin_provider
在项目的config/app.php文件里面,找到providers配置节,把如下代码加到它的配置数组里面:
image
4. 注册第三方登录事件的监听
在项目的app/Providers/EventServiceProvider.php里面加入以下代码:
image
laravel框架整体上是一种IOC跟事件驱动的思想,熟悉js就会对事件驱动非常熟悉,熟悉设计模式,就会对IOC(控制反转,也称为DI:依赖注入)比较熟悉,这个是理解第3步和第4步配置作用的关键。
5. 编写微信登录的接口
举例如下:
+ View code
Socialite::with('weixin')会返回php_weixin_provider的实例,也就是它:
image
拿到这个实例之后,就可以采用链式的方式调用它提供的所有public方法,比如设置配置参数,setDevice等等。
6. 编写微信登录回调的接口
举例如下:
+ View code
通过Socialite::with('weixin')拿到php_weixin_provider实例后,调用user方法,就会自动跟微信调用相关接口,并把微信的返回值封装成对象返回。如果在此过程中,有任何错误都会以异常的形式抛出,比如state参数校验失败,比如code失效等。
返回的$user对象包含的有效属性有:
image
小结:
这个方案是基于laravel/socialite实现,并发布到composer来使用的。laravel/socialite是laravel官方提供的第三方登录的模块,基于它可以很方便的集成大部分第三方平台的认证,目前它官方已经提供很多第三方的登录实现: 。除了国外的facebook,google,github等,国内的微信,微博,qq也都有提供。我在一开始也用的是它官方提供的默认的微信登录provider来做的,但是后来我发现了以下几个问题:
1. 不支持微信授权的代理;
2. pc端跟移动端竟然还是分两个项目来做的:
image
3. 它封装的user对象里竟然不包含unionid
4. 更改配置参数的方式,实在是让人觉得难以使用:
image
所以我就在它官方的微信登录provider基础上,按照自己的想法,重新实现了一个来解决我发现的这些问题

以上就是我爱编程网小编为大家带来的微信服务号php开发框架 php如何进行微信公众号开发,希望对大家有帮助,了解更多相关资讯请关注我爱编程网。
与“微信服务号php开发框架 php如何进行微信公众号开发”相关推荐
php微信快速开发框架 php如何进行微信公众号开发
php微信快速开发框架 php如何进行微信公众号开发

想学习微信公众平台开发需要学习那些知识呢?PHPJAVAorHTML?微信作为现代人必备的一款的聊天软件变得越来越火爆,尤其是微信公众账号更成了人们获取资讯的重要渠道,然后对于我们开发人员来说,制作和搭建一个微信公众平台成为一个网站开发人员比较时尚的新技术,然而对于有开发经验的开发者来说,微信公众开发只不过需要三个主要技术:h5移动端网站页面、微信公众账号平台提供的开发者API、网站后台语

2023-09-29 12:14:28
微信公众号开发框架php 开发微信公众号用PHP好还是java好?
微信公众号开发框架php 开发微信公众号用PHP好还是java好?

微信公众号是有什么程序语言开发的需要“PHP语言程序、MySQL数据库、计算机网络通讯、及HTTP/XML/CSS/JS等基础”PHPPHP,一个嵌套的缩写名称,是英文超级文本预处理语言的缩写。PHP是一种HTML内嵌式的语言,PHP与微软的ASP颇有几分相似,都是一种在服务器端执行的嵌入HTML文档的脚本语言,语言的风格有类似于C语言,现在被很多的网站编程人员广泛的运用。PH

2023-10-05 15:59:14
微信公众号PHP框架 php微信开发是什么?
微信公众号PHP框架 php微信开发是什么?

如何将微信公众号文章同步到Php和cms系统网站里?运行孤狼采集器软件,点击发布到发布窗口界面;2、点击添加,选择发布接口,选择网站编码、填写后台路径、(因为是免登陆接口)选择不需要登录&amp;http请求,然后获取列表看看是否成功,成功后请保持配置,就可以直接发布文章进去了!PHP使用Face++接口开发微信公众平台人脸识别系统的方法?具体步骤如下:首先,先登录face

2023-08-26 07:31:16
微信公众号php开发框架 微信公众号是有什么程序语言开发的
微信公众号php开发框架 微信公众号是有什么程序语言开发的

微信公众号是有什么程序语言开发的需要“PHP语言程序、MySQL数据库、计算机网络通讯、及HTTP/XML/CSS/JS等基础”PHPPHP,一个嵌套的缩写名称,是英文超级文本预处理语言的缩写。PHP是一种HTML内嵌式的语言,PHP与微软的ASP颇有几分相似,都是一种在服务器端执行的嵌入HTML文档的脚本语言,语言的风格有类似于C语言,现在被很多的网站编程人员广泛的运用。PH

2023-10-05 08:44:29
php开发微信公众号框架 微信公众号与HTML5混合模式揭秘1--如何部署JSSDK_html/css_WEB-ITnose
php开发微信公众号框架 微信公众号与HTML5混合模式揭秘1--如何部署JSSDK_html/css_WEB-ITnose

想学习微信公众平台开发需要学习那些知识呢?PHPJAVAorHTML?微信作为现代人必备的一款的聊天软件变得越来越火爆,尤其是微信公众账号更成了人们获取资讯的重要渠道,然后对于我们开发人员来说,制作和搭建一个微信公众平台成为一个网站开发人员比较时尚的新技术,然而对于有开发经验的开发者来说,微信公众开发只不过需要三个主要技术:h5移动端网站页面、微信公众账号平台提供的开发者API、网站后台语

2023-08-27 08:16:52
php微信公众号开源框架 微信公众号是有什么程序语言开发的
php微信公众号开源框架 微信公众号是有什么程序语言开发的

微信公众号是有什么程序语言开发的需要“PHP语言程序、MySQL数据库、计算机网络通讯、及HTTP/XML/CSS/JS等基础”PHPPHP,一个嵌套的缩写名称,是英文超级文本预处理语言的缩写。PHP是一种HTML内嵌式的语言,PHP与微软的ASP颇有几分相似,都是一种在服务器端执行的嵌入HTML文档的脚本语言,语言的风格有类似于C语言,现在被很多的网站编程人员广泛的运用。

2023-10-04 03:26:09
php微信公众号开发框架 php微信公众平台开发ibeacon怎么写
php微信公众号开发框架 php微信公众平台开发ibeacon怎么写

怎么样使用php的laravel框架快速集成微信登录1.安装php_weixin_provider在项目下运行composerrequirethirdproviders/weixin,即可完成安装。安装成功后,在项目的vendor目录下应该能看到php_weixin_provider的库文件:image2.配置微信登录的参数一共有7个参数可以配置,分别是:client_i

2023-10-04 03:56:34
PHP公众号框架 开发微信公众号用PHP好还是java好?
PHP公众号框架 开发微信公众号用PHP好还是java好?

如何将微信公众号文章同步到Php和cms系统网站里?运行孤狼采集器软件,点击发布到发布窗口界面;2、点击添加,选择发布接口,选择网站编码、填写后台路径、(因为是免登陆接口)选择不需要登录&amp;http请求,然后获取列表看看是否成功,成功后请保持配置,就可以直接发布文章进去了!开发微信公众号用PHP好还是java好?PHP更为实用。现在的ISP提供的虚拟主机多数只能运行PHP,不

2023-09-12 12:21:26