微信公众号开发
2016-09-28 12:11
260 查看
01:我们首先注册一个微信订阅号 02: (1)进入后台,进行消息自动回复,自定义菜单的操作 (2)接口调用,自己开发。 首先:我用的是测试号开发.(因为权限的限制) (地址:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login) 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://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET 这里我们需要知道: appid:*** secret:*** 很巧我们已经知道了。 正常情况下,微信会返回下述JSON数据包给公众号: {"access_token":"ACCESS_TOKEN","expires_in":7200}
2:被动消息回复 01:文本回复: 在demo实例中我们可以发现: 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)){ /* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection, the best way is to check the validity of xml by yourself */ 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://api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE 这里我们需要获取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"
}
相关文章推荐
- 微信公众号开发第四课 实现自定义关键字回复
- 微信公众号开发第一课 预备知识和申请权限账号
- 和小猪一起搞微信公众号开发—获取Access_token
- 微信公众号开发模式之用户账号绑定
- 微信公众号开发之使用eclipse创建微信web工程并发布到BAE测试
- 微信公众号开发接口语音下载解决方案
- 和小猪一起搞微信公众号开发—创建自定义菜单
- 【微信开发】微信公众号开发 之 编辑模式使用
- 微信公众号开发图文消息心得
- 微信公众号开发第二课 百度BAE搭建和数据库使用
- 微信公众号开发第七课 微信实现几个常见功能
- 重回微信公众号开发!
- 和小猪一起搞微信公众号开发—回复简单文本
- 微信公众号开发第八课 微信的消息类型解析
- 微信公众号php开发接口怎么主动推送信息
- 微信公众号接口开发为什么不能使用循环语句?
- 微信公众号开发第六课 BAE结合实现迅雷账号随机分享
- Android开发学习之微信公众号界面
- 微信公众号开发地理位置坐标的转换
- 如何在本机完成微信公众号开发调试