您的位置:首页 > 移动开发 > 微信开发

微信公众号开发

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"

}







 


 

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: