微信公众号开发

[php]  view plain  copy
  1. 01:我们首先注册一个微信订阅号  
  2. 02: (1)进入后台,进行消息自动回复,自定义菜单的操作  
  3.      (2)接口调用,自己开发。  
  4. 首先:我用的是测试号开发.(因为权限的限制)  
  5. (地址:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login)  
  6.       APPID:***  
  7.       APPSECRET:***  
  8.   
  9. 对接  
  10. URL:(换成自己的)  
  11. Token:( 换成自己的)  
  12.       进行对接在微信开发开发手册中 PHP (demo),放入上面的URL的地址中(记得Token换一下)  
  13.       对接成功后我们就可以愉快的开发了,是不是有点小激动。  
  14. <pre name="code" class="php">1:获取access_token  
  15.         
  16.    access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。  
  17.   
  18. 接口地址:  
  19. http请求方式: GET  
  20. https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET  
  21.   
  22.   
  23. 这里我们需要知道:  
  24. appid:***  
  25. secret:***  
  26. 很巧我们已经知道了。  
  27.   
  28. 正常情况下,微信会返回下述JSON数据包给公众号:   
  29. {"access_token":"ACCESS_TOKEN","expires_in":7200}  
[php]  view plain  copy
  1. 2:被动消息回复  
  2.    01:文本回复:  
  3.    在demo实例中我们可以发现:  
  4.    public function responseMsg()  
  5.    {  
  6.         //get post data, May be due to the different environments  
  7.         $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];  
  8.   
  9.         //extract post data  
  10.         if (!empty($postStr)){  
  11.                 /* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection, 
  12.                    the best way is to check the validity of xml by yourself */  
  13.                 libxml_disable_entity_loader(true);  
  14.                 $postObj = simplexml_load_string($postStr'SimpleXMLElement', LIBXML_NOCDATA);  
  15.                 $fromUsername = $postObj->FromUserName;  
  16.                 $toUsername = $postObj->ToUserName;  
  17.                 $keyword = trim($postObj->Content);  
  18.                 $time = time();  
  19.                 $textTpl = "<xml>  
  20.                 <ToUserName><![CDATA[%s]]></ToUserName>  
  21.                 <FromUserName><![CDATA[%s]]></FromUserName>  
  22.                 <CreateTime>%s</CreateTime>  
  23.                 <MsgType><![CDATA[%s]]></MsgType>  
  24.                 <Content><![CDATA[%s]]></Content>  
  25.                 <FuncFlag>0</FuncFlag>  
  26.                 </xml>";               
  27.         if(!empty$keyword ))  
  28.                 {  
  29.                     $msgType = "text";  
  30.                     $contentStr = "Welcome to wechat world!";  
  31.                     $resultStr = sprintf($textTpl$fromUsername$toUsername$time$msgType$contentStr);  
  32.                     echo $resultStr;  
  33.                 }else{  
  34.                     echo "Input something...";  
  35.                 }  
  36.   
  37.         }else {  
  38.             echo "";  
  39.             exit;  
  40.         }  
  41.      }  
  42.   
  43.      如上面实例中:我们可以看到  
  44.      $contentStr = "Welcome to wechat world!";   
  45.      现在我们可以测试一下,关注公众号:  
  46.      发送数据,  
  47.      看到返回回来的正是:$contentStr  
  48.      (这个$contentStr 我们可以改成自己喜欢的,哈哈)  

[php]  view plain  copy
  1.        02:图片回复:  
  2.        可以看到在demo中  
  3.        $msgType = "text";  
  4.        是不是觉得改成$msgType = "image"就行了? 这是错误的。  
  5.        我们可以仔细的分析一下demo  
  6.             if(!empty$keyword ))  
  7.                 {  
  8.                     $msgType = "text";  
  9.                     $contentStr = "Welcome to wechat world!";  
  10.                     $resultStr = sprintf($textTpl$fromUsername$toUsername$time$msgType$contentStr);  
  11.                     echo $resultStr;  
  12.                 }else{  
  13.                     echo "Input something...";  
  14.                 }  
  15.   
  16.    $resultStr = sprintf($textTpl$fromUsername$toUsername$time$msgType$contentStr);  
  17.   
  18.     这里面的参数:  
  19.    $textTpl  是不是是文本类型的?  
  20.     所以我们要改成image 的类型:     
  21.   
  22.                 $imgTpl = "<xml>  
  23.                <ToUserName><![CDATA[%s]]></ToUserName>  
  24.                <FromUserName><![CDATA[%s]]></FromUserName>  
  25.                <CreateTime>%s</CreateTime>  
  26.                <MsgType><![CDATA[%s]]></MsgType>  
  27.                <Image>  
  28.                            <MediaId><![CDATA[%s]]></MediaId>  
  29.                            </Image >  
  30.             </xml>";  
  31.                注意到现在还没有完了。  
  32.                参数里的$contentStr可不是文本的$contentStr = "Welcome to wechat world!";  
  33.   
  34.                应该是$mediald了。  
  35.                那么问题就来了?  
  36.                Mediald从哪来?是什么?  
  37.                Mediald是一个文件的唯一标示。  
  38.   
  39.                我们上传文件才能获取Mediald  
  40.   
  41.                所以我们就的上传文件,调动接口了。  
  42.                在开发文档的素材管理中:  
  43.                新增临时素材:  
  44.                接口地址:https://api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE  
  45.   
  46.                这里我们需要获取access_token值(上面我们已经获取到了)  
  47.   
  48.                Type的类型:image  
  49.   
  50.                成功的时候回返回  
  51.                {"type":"TYPE","media_id":"MEDIA_ID","created_at":123456789}  
  52.   
  53.                我们拿到media_id值,  
  54.   
  55.                $mediald=media_id值  
  56.   
  57.                然而这个参数写成:  
  58.                $resultStr = sprintf($imgTpl$fromUsername$toUsername$time$msgType$mediald);  
  59.   
  60.   
  61.                我们也可以指定一个规则:  
  62.   
  63.                 if(!empty$keyword ))  
  64.                 {  
  65.                   If($keyword==”img”)  
  66.                    {  
  67.                     $imgTpl = "<xml>  
  68.                    <ToUserName><![CDATA[%s]]></ToUserName>  
  69.                    <FromUserName><![CDATA[%s]]></FromUserName>  
  70.                    <CreateTime>%s</CreateTime>  
  71.                    <MsgType><![CDATA[%s]]></MsgType>  
  72.                    <Image>  
  73.                                <MediaId><![CDATA[%s]]></MediaId>  
  74.                                </Image >  
  75.                    </xml>";  
  76.                         $msgType = "image";  
  77.                     $mediald=media_id;  
  78.                     $resultStr = sprintf($imgTpl$fromUsername$toUsername$time$msgType$mediald);  
  79.                     echo $resultStr;  
  80.   
  81.                   }  
  82.                    else  
  83.                   {  
  84.                     $msgType = "text";  
  85.                     $contentStr = "Welcome to wechat world!";  
  86.                     $resultStr = sprintf($textTpl$fromUsername$toUsername$time$msgType$contentStr);  
  87.                     echo $resultStr;  
  88.                   }                  
  89.                   }else{  
  90.                     echo "Input something...";  
  91.                   }  
  92.  进行测试;  
  93. 这样是不感觉特别爽呀!!!  
  94. <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"
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值