- 01:我们首先注册一个微信订阅号
- 02: (1)进入后台,进行消息自动回复,自定义菜单的操作
- (2)接口调用,自己开发。
- 首先:我用的是测试号开发.(因为权限的限制)
- (地址:https:
- APPID:***
- APPSECRET:***
-
- 对接
- URL:(换成自己的)
- Token:( 换成自己的)
- 进行对接在微信开发开发手册中 PHP (demo),放入上面的URL的地址中(记得Token换一下)
- 对接成功后我们就可以愉快的开发了,是不是有点小激动。
- <pre name="code" class="php">1:获取access_token
-
- access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。
-
- 接口地址:
- http请求方式: GET
- https:
-
-
- 这里我们需要知道:
- appid:***
- secret:***
- 很巧我们已经知道了。
-
- 正常情况下,微信会返回下述JSON数据包给公众号:
- {"access_token":"ACCESS_TOKEN","expires_in":7200}
- 2:被动消息回复
- 01:文本回复:
- 在demo实例中我们可以发现:
- public function responseMsg()
- {
-
- $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
-
-
- if (!empty($postStr)){
-
-
- libxml_disable_entity_loader(true);
- $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;
- }
- }
-
- 如上面实例中:我们可以看到
- $contentStr = "Welcome to wechat world!";
- 现在我们可以测试一下,关注公众号:
- 发送数据,
- 看到返回回来的正是:$contentStr
- (这个$contentStr 我们可以改成自己喜欢的,哈哈)
- 02:图片回复:
- 可以看到在demo中
- $msgType = "text";
- 是不是觉得改成$msgType = "image"就行了? 这是错误的。
- 我们可以仔细的分析一下demo
- if(!empty( $keyword ))
- {
- $msgType = "text";
- $contentStr = "Welcome to wechat world!";
- $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
- echo $resultStr;
- }else{
- echo "Input something...";
- }
-
- $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
-
- 这里面的参数:
- $textTpl 是不是是文本类型的?
- 所以我们要改成image 的类型:
-
- $imgTpl = "<xml>
- <ToUserName><![CDATA[%s]]></ToUserName>
- <FromUserName><![CDATA[%s]]></FromUserName>
- <CreateTime>%s</CreateTime>
- <MsgType><![CDATA[%s]]></MsgType>
- <Image>
- <MediaId><![CDATA[%s]]></MediaId>
- </Image >
- </xml>";
- 注意到现在还没有完了。
- 参数里的$contentStr可不是文本的$contentStr = "Welcome to wechat world!";
-
- 应该是$mediald了。
- 那么问题就来了?
- Mediald从哪来?是什么?
- Mediald是一个文件的唯一标示。
-
- 我们上传文件才能获取Mediald
-
- 所以我们就的上传文件,调动接口了。
- 在开发文档的素材管理中:
- 新增临时素材:
- 接口地址:https:
-
- 这里我们需要获取access_token值(上面我们已经获取到了)
-
- Type的类型:image
-
- 成功的时候回返回
- {"type":"TYPE","media_id":"MEDIA_ID","created_at":123456789}
-
- 我们拿到media_id值,
-
- $mediald=media_id值
-
- 然而这个参数写成:
- $resultStr = sprintf($imgTpl, $fromUsername, $toUsername, $time, $msgType, $mediald);
-
-
- 我们也可以指定一个规则:
-
- if(!empty( $keyword ))
- {
- If($keyword==”img”)
- {
- $imgTpl = "<xml>
- <ToUserName><![CDATA[%s]]></ToUserName>
- <FromUserName><![CDATA[%s]]></FromUserName>
- <CreateTime>%s</CreateTime>
- <MsgType><![CDATA[%s]]></MsgType>
- <Image>
- <MediaId><![CDATA[%s]]></MediaId>
- </Image >
- </xml>";
- $msgType = "image";
- $mediald=media_id;
- $resultStr = sprintf($imgTpl, $fromUsername, $toUsername, $time, $msgType, $mediald);
- echo $resultStr;
-
- }
- else
- {
- $msgType = "text";
- $contentStr = "Welcome to wechat world!";
- $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
- echo $resultStr;
- }
- }else{
- echo "Input something...";
- }
- 进行测试;
- 这样是不感觉特别爽呀!!!
- <p>3:开发Oauth2.0 的授权:</p><p> 我们可以先看一下文档</p><p><a target=_blank href="https://mp.weixin.qq.com/wiki/4/9ac2e7b1f1d22e9e57260f6553822520.html#.E7.AC.AC.E4.B8.80.E6.AD.A5.EF.BC.9A.E7.94.A8.E6.88.B7.E5.90.8C.E6.84.8F.E6.8E.88.E6.9D.83.EF.BC.8C.E8.8E.B7.E5.8F.96code">第一步:用户同意授权,获取code</a></p><pre> <a target=_blank href="https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect" target="_blank">https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect</a>
这里的参数:
Appid:公众号的唯一标识
redirect_uri:授权后重定向的回调链接地址,请使用urlencode对链接进行处理
scope: ……
用户同意授权后
如果用户同意授权,页面将跳转至 redirect_uri/?code=CODE&state=STATE。若用户禁止授权,则重定向后不会带上code参数,仅会带上state参数redirect_uri?state=STATE
我们可以接一下code值:
$code=$_GET[‘code’]
第二步:通过code换取网页授权access_token
这里access_token可不是以上的那个access_token
获取code后,请求以下链接获取access_token:
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
成功以后:
{
"access_token":"ACCESS_TOKEN",
"expires_in":7200,
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID",
"scope":"SCOPE"
}
我们会获取很多数据.
openid
access_token
第三步:拉取用户信息
http:GET(请使用https协议)
https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
access_token:
opened:
我们都获取到了。
调用成功后我们就可以获取用户的信息了。
{
"openid":" OPENID",
" nickname": NICKNAME,
"sex":"1",
"province":"PROVINCE"
"city":"CITY",
"country":"COUNTRY",
"headimgurl": " http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46",
"privilege":[
"PRIVILEGE1"
"PRIVILEGE2"
],
"unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
}