程序员人生 网站导航

[置顶] 微信开发__入门

栏目:htmlcss时间:2016-06-03 19:27:30

0.作者前言

本文针对人群是有1定开发基础的人员,可以比较快的帮助你了解和学习微信开发.

其次是本文作者本次书写,全部采取的是个人的定阅号,假设是正常的开发流程,可能会存在不同,请读者注意.

本文代码部份主要提供的是关键代码,非关键代码因人而异,需要读者自行补充,请注意.

今天文章下面对1些方法进行了封装,虽然在公司里面,这些都是由后台来对这些任务完成,但是身为1个有理想,有抱负的前端,我们会肯定是有必要的,对吧.而且微信开发很多时候,也是直接由前端来开发完成的.

最后,如果喜欢本文,请关注我呦. 2016年05月31日

CSDN:http://blog.csdn.net/mr_lp?viewmode=contents

二维码.jpg


1.基本认知

  • 定阅号
  • 公众号
  • 企业号

具体内容请参考 微信公众平台注册步骤示例图(企业)

我们只需要明白下面这个图的内容。

服务类型

2. 开发前准备

  1. 申请1个微信公众号

    微信公众号链接

我们选择了

B8BDCB54-7965-4E3C-8B1D-811D1EA02246.png

以后我们首先需要去配置1下接口.

BEF3170B-E101-49E4-880C-BAB290432959.png

以后我们就能够去修改我们的token.

8980F8D3-802E-4CCD-8DE2-5E26551029C4.png

以后我们需要前往

开发–> 开发者工具 –> 开始开发 –> 接入指南

可以直接点击 接入指南

找到 PHP示例代码下载去进行下载.

90EDAB27-02F4-484B-8CEB-BB95370298FA.png

我这里帮大家偷个懒 PHP 示例代码下载

下载以后我们需要去进行解紧缩,将解紧缩以后的文件名称去进行1下修改,例如可以改成 wx.php.

以后我们打开php , 去将里面的内容 token 去进行更改.

以后我们将其重新紧缩,紧缩完成以后我们需要打开我们的新浪云去管理我们的 PHP 文件.

首先,使用新浪云首先需要进行新浪云的注册和实名认证,这里相信大家都能弄明白.

只是额外提1点,新浪云是需要消耗芸豆的,而新手注册会赠送200芸豆,以后则需要自己去购买了.

但是如果是好友约请,你除当前的200以外,应当,注意是应当会额外赠送你200芸豆,所以咯,小火伴们如果不厌弃,可以直接用我下面的注册链接,这样你应当就可以取得 400 芸豆了.

我的约请链接 http://t.cn/R5UICr2

017BC6E0-132A-4AA8-AAEA-2EECB4012F7A.png

在我们注册以后,我们就需要开始去创建我们新的利用了.

0686D7BE-90EE-4C3F-B7F3-2317C59ED72B.png

91BBAD1B-6A56-4F96-A144-E90132B3E543.png

这里需要注意, PHP 的版本不要选太高,否则会影响后面的内容.

4EA53382-E564-4E28-97A9-6C1FBAFE5489.png

创建了空利用以后,我们就能够在这里找到我们刚才创建的利用了,点击上面的利用名称.

364580DA-D4C9-4CF0-9C41-C81AFC2D0B6C.png

找到利用中的代码管理,以后选择右边的上传代码.

这时候候发现,提示代码上传只支持 zip, gz, tar.gz 3种格式.

这时候候就能够把我们刚才特地打包好的利用去上传上去了.

69BF8A1AD257949D9060DCB66CD77ABA.png

上传以后,我们也能够在上传代码的边上找到编辑代码.

以后直接在编辑代码中去更改我们的 PHP 文件了.

64322644-D3AD-4E72-9CAA-F956ECE6177F.png

还记得我们刚才在边上有1个链接么?

这时候候我们就能够将刚才的链接去直接复制过去,回到微信开发接口这边,把刚才的 URL 填写进去.

但是需要注意,我们需要将链接补全终了,

也就是将刚才的路径去做1个更改,将地址和文件名串连在1起,以后回到刚才的接口中,可以去做 URL 的添加,但是需要注意,需要在前面添加上 HTML 协议.

F727B357-FDC3-4FE9-B665-DD992A5C58B4.png

至此,我们已获得了 我们的接口,接下来就正式进入微信开发.


3.获得access_token

access_token是公众号的全局唯1接口调用凭据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。

以上话术出自 获得access_token

这里主要就是看看你刚才去生成的 APPID 和 APPSECRET 能否正常的获得.

89F91023-38DC-4B7D-A872-8116D6B06040.png

这里我们可以直接现在网页中去尝试1下,看看能否获得数据.

DB6B8E48-B614-46A8-9401-E7FCF497A8A8.png

这里把刚才的APPID 等填写进去,如果成功的话,我们应当就可以看见我们的 access_token 了.

http要求方式:

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

这块代码是固定的,可以直接粘贴.

E37C17A7-9D0D-4D67-A369-2B71BDBDF90F.png

可是我现在只是在网页中获得出来了,我们要是在程序中怎样去获得呢?难道用 AJAX ? 固然不是,这时候候我们需要使用 PHP 去获得.

<?php $appid = "**********这里书写自己的 id*********"; $appsecret = "**********这里书写自己的secret*********"; $api = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}}&secret={$appsecret}"; $json = file_get_contents($api); // 这类可以进行获得,但是数据不稳定,所以不推荐使用 // 微信官方推荐使用的方法是 curl, // 我们可以新建1个 PHP,去 打印1下 phpinfo(); // 以后在网页中去查询1下是不是有 curl 这个内容 echo $json; ?>

如果我们验证以后确切存在,我们就能够去使用微信提供的方式.

<?php $appid = "**********这里书写自己的 id*********"; $appsecret = "**********这里书写自己的secret*********"; $api = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}}&secret={$appsecret}"; //$json = file_get_contents($api); // 这类可以进行获得,但是数据不稳定,所以不推荐使用 // 微信官方推荐使用的方法是 curl, // 我们可以新建1个 PHP,去 打印1下 phpinfo(); // 以后在网页中去查询1下是不是有 curl 这个内容 // echo phpinfo();//比file_get_contents稳定且能发送post要求 function httpGet($url) { $curl = curl_init(); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_TIMEOUT, 500); // 为保证第3方服务器与微佩服务器之间数据传输的安全性,所有微信接口采取https方式调用,必须使用下面2行代码打开ssl安全校验。 // 如果在部署进程中代码在此处验证失败,请到 http://curl.haxx.se/ca/cacert.pem 下载新的证书辨别文件。 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true); // curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true); // 这里进行注释是由于这里是进行 token 去进行验证 // 避免其他人歹意刷内容 // 这里由于是本地测试,所以注释1下,正式上线的时候还是需要注释开的 curl_setopt($curl, CURLOPT_URL, $url); $res = curl_exec($curl); curl_close($curl); return $res; } $json = httpGet($api); echo $json; ?>

此段代码可以在 微信JS-SDK中查询到.

这时候候我们应当就可以够获得我们的 token 了,但是我们现在还需要将其重新获得出来,我们可以将其转换为1个数组,以后重新获得我们的 access_token.

<?php $appid = "**********这里书写自己的 id*********"; $appsecret = "**********这里书写自己的secret*********"; $api = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}}&secret={$appsecret}"; function httpGet($url) { $curl = curl_init(); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_TIMEOUT, 500); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true); // curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true); curl_setopt($curl, CURLOPT_URL, $url); $res = curl_exec($curl); curl_close($curl); return $res; } $str = httpGet($api); // 第2个参数设置为 true ,返回值改成数组 $arr = json_decode($str,true); print_r($arr); $accessToken = $arr["assess_token"]; ?>

我们已获得了具体的 access_token, 以后我们就能够存入我们的数据库中,每次使用的时候去进行1个判断,如果是旧的就去获得新的替换它.

这里不对数据库操作做更多说明,这个完全看自己习惯,

只是补充1点, token 的 类型要是 TEXT ,time 的类型最好是 VARCHAR.

7B711FC2-1A2F-454E-B3FA-19B0DBE97BEA.png

以后回到代码部份,这时候候我们会首先去连接1下我们刚才的数据库.

具体连接数据库请自行操作.

以后我们就去通过数据库操作去获得到我们的 token.

<?php $appid = "**********这里书写自己的 id*********"; $appsecret = "**********这里书写自己的secret*********"; function httpGet($url) { $curl = curl_init(); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_TIMEOUT, 500); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true); // curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true); curl_setopt($curl, CURLOPT_URL, $url); $res = curl_exec($curl); curl_close($curl); return $res; } $str = httpGet($api); function getToken(){ global $appid; global $appsecret; $api = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}}&secret={$appsecret}"; // 第2个参数设置为 true ,返回值改成数组 $arr = json_decode($str,true); // print_r($arr); $accessToken = $arr["assess_token"]; return $accessToken; } $sql = "SELECT * FROM token"; $result = mysql_query($sql); if (mysql_num_rows($result) > 0) { //我们判断时间是不是过期 $row = mysql_fetch_assoc($result); $time = $row["time"]; $nowTime = time(); // 由于刚才微信默许的有效时间是7200秒(2小时) if ($nowTime - $time > 7200) { // 过期了,重新获得并更新数据库 $token = getToken(); $time = time(); $sql = "UPDATE token SET token='{$token}',time='$time'"; mysql_query($sql); if (mysql_affected_rows() > 0) { echo "更新成功"; } else{ echo "更新失败"; } } else{ // 没过期 $token = $row["token"]; } echo $token; } else{ //没有的话,就直接去插入 $sql = "INSERT INTO token(id,token,time) VALUES (NULL,'{$accessToken}','{$time}')"; mysql_query($sql); if (mysql_insert_id() > 0) { echo "插入成功"; } else{ echo "插入失败"; } } echo $token; ?>

4.获得微佩服务器IP地址

如果公众号基于安全等斟酌,需要获知微佩服务器的IP地址列表,以便进行相干限制,可以通过该接口取得微佩服务器IP地址列表或IP网段信息。

以上话术出自 获得微佩服务器IP地址

34AA61D0-C309-4A67-9F2A-5ACF1204BCEF.png

http要求方式:

GET
https://api.weixin.qq.com/cgi-bin/getcallbackip?access_token=ACCESS_TOKEN

这里我们首先可以先来获得1下微信的服务器列表.

// 获得微佩服务器列表 function getIP($token){ $api = "https://api.weixin.qq.com/cgi-bin/getcallbackip?access_token={$token}"; $json = http_get($api); echo $json; } getIP($token);

我们再对其进行1下封装,

// 获得微佩服务器列表 function getIP($token){ $api = "https://api.weixin.qq.com/cgi-bin/getcallbackip?access_token={$token}"; $json = http_get($api); $arr = json_decode($json,true); return $arr["ip_list"]; } $ip_List = getIP($token); print_r($ip_List);

记得实际操作的时候,需要对获得到的数据进行1个验证,只有在获得到了对应的数据以后再进行下面的操作.

一样的操作,像我们想获得用户列表等内容,一样也是如此.

5.获得用户列表

公众号可通过本接口来获得帐号的关注者列表,关注者列表由1串OpenID(加密后的微信号,每一个用户对每一个公众号的OpenID是唯1的)组成。1次拉取调用最多拉取10000个关注者的OpenID,可以通过量次拉取的方式来满足需求。

以上话术出自 获得用户列表

http要求方式:

GET(请使用https协议)
https://api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&next_openid=NEXT_OPENID

A36B4175-B2F7-41BA-9412-A06EECCDBA2A.png

我们也能够对其进行1下封装.

// 第2个参数为可选参数 function getUserList($token,$nextOpendId = false){ if ($nextOpendId) { $api = "https://api.weixin.qq.com/cgi-bin/user/get?access_token={$token}&next_openid={$nextOpendId}"; } else{ $api = "https://api.weixin.qq.com/cgi-bin/user/get?access_token={$token}"; } $json = httpGet($api); echo $json; // $arr = json_decode($json,true); } getUserList($token); // 用这个方法可以获得到我们的内容是从哪一个位置开始 // 例如假设有 100个人,我们给定的是 第50 个人的 token, 返回的应当是 51 - 100 // getUserList($token,"用户的 token 内容");

这时候候我们就能够对其进行1下打印,打印以后就能够看到我们的想要的用户列表了.

6.获得用户详细信息

在关注者与公众号产生消息交互后,公众号可取得关注者的OpenID(加密后的微信号,每一个用户对每一个公众号的OpenID是唯1的。对不同公众号,同1用户的openid不同)。公众号可通过本接口来根据OpenID获得用户基本信息,包括昵称、头像、性别、所在城市、语言和关注时间。
请注意,如果开发者有在多个公众号,或在公众号、移动利用之间统1用户帐号的需求,需要前往微信开放平台(open.weixin.qq.com)绑定公众号后,才可利用UnionID机制来满足上述需求。

上方出自 微信公众平台说明 获得用户基本信息(UnionID机制)

http要求方式:

GET
https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN 

2938F6E2-04F3-4152-85C0-4F55FA5E85B1.png

//获得用户详细信息 function getUserInfo($token,$userOpenId){ $api = "http要求方式: GET https://api.weixin.qq.com/cgi-bin/user/info?access_token={$token}}&openid={$userOpenId}}&lang=zh_CN"; $json = httpGet($api); $arr = json_decode($json,true); return $arr; } getUserList($token,"用户的 token 内容"); $userInfo = getUserInfo($token,"某1用户的 token"); // 获得用户信息 print_r($userInfo); // 获得用户头像 echo "<img src = '".$userInfo["headimgurl"]."'>";

7.长链接转短链接接口

在今天文章最后,我们再来给大家演示1个 post 接口的写法.

将1条长链接转成短链接。
主要使用处景: 开发者用于生成2维码的原链接(商品、支付2维码等)太长致使扫码速度和成功率降落,将原长链接通过此接口转成短链接再生成2维码将大大提升扫码速度和成功率。

上述话语出自 长链接转短链接接口

http要求方式:
POST
https://api.weixin.qq.com/cgi-bin/shorturl?access_token=ACCESS_TOKEN

以上要求网址是固定的,可以直代替换.

1E84F82C-287E-4D30-B105-DF820C721DBA.png

function httpPost($data,$url){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)'); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_AUTOREFERER, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $tmpInfo = curl_exec($ch); if (curl_errno($ch)) { return curl_error($ch); } curl_close($ch); return $tmpInfo; } function longToShort($token,$url){ $api = "https://api.weixin.qq.com/cgi-bin/shorturl?access_token={$token}"; // 这里直接采取官网提供的url 了 $data = '{"action":"long2short","long_url":"'$url.'"}'; $json = httpPost($data,$api); // echo $json; return json_decode($json,true); } longToShort($token,"https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1443433600&token=&lang=zh_CN"); print_r($arr);

这时候候我们可以去打印1下现在的URL ,这时候候我们就没必要使用之前的非常长的接口内容了,而可以直接去使用我们缩短的网址了.

同时这个函数不单单可以用在此处,其余时候也能够直接去使用.

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐