微信公众平台开发者文档(腾讯官方)一、新手接入1.1、接入指南第一步:申请消息接口在公众平台网站的高级功能–开发模式页,点击“成为开发者”按钮,填写URL和Token,其中URL是开发者用来接收微信服务器数据的接口URL。Token可由开发者可以任意填写,用作生成签名(该Token会和接口URL中包含的Token进行比对,从而验证安全性)。第二步:验证URL有效性开发者提交信息后,微信服务器将发送GET请求到填写的URL上,GET请求携带四个参数:参数描述signature微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。timestamp时间戳nonce随机数echostr随机字符串开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。加密/校验流程如下:1.将token、timestamp、nonce三个参数进行字典序排序2.将三个参数字符串拼接成一个字符串进行sha1加密3.开发者获得加密后的字符串可与signature对比,标识该请求来源于微信检验signature的PHP示例代码:privatefunctioncheckSignature(){$signature=$_GET[signature];$timestamp=$_GET[timestamp];$nonce=$_GET[nonce];$token=TOKEN;$tmpArr=array($token,$timestamp,$nonce);sort($tmpArr);$tmpStr=implode($tmpArr);$tmpStr=sha1($tmpStr);if($tmpStr==$signature){returntrue;}else{returnfalse;}}PHP示例代码下载:(如下:)?php/***wechatphptest*///defineyourtokendefine(TOKEN,weixin);$wechatObj=newwechatCallbackapiTest();$wechatObj-valid();classwechatCallbackapiTest{publicfunctionvalid(){$echoStr=$_GET[echostr];//validsignature,optionif($this-checkSignature()){echo$echoStr;exit;}}publicfunctionresponseMsg(){//getpostdata,Maybeduetothedifferentenvironments$postStr=$GLOBALS[HTTP_RAW_POST_DATA];//extractpostdataif(!empty($postStr)){$postObj=simplexml_load_string($postStr,'SimpleXMLElement',LIBXML_NOCDATA);$fromUsername=$postObj-FromUserName;$toUsername=$postObj-ToUserName;$keyword=trim($postObj-Content);$time=time();$textTpl=xmlToUserName![CDATA[%s]]/ToUserNameFromUserName![CDATA[%s]]/FromUserNameCreateTime%s/CreateTimeMsgType![CDATA[%s]]/MsgTypeContent![CDATA[%s]]/ContentFuncFlag0/FuncFlag/xml;if(!empty($keyword)){$msgType=text;$contentStr=Welcometowechatworld!;$resultStr=sprintf($textTpl,$fromUsername,$toUsername,$time,$msgType,$contentStr);echo$resultStr;}else{echoInputsomething...;}}else{echo;exit;}}privatefunctioncheckSignature(){$signature=$_GET[signature];$timestamp=$_GET[timestamp];$nonce=$_GET[nonce];$token=TOKEN;$tmpArr=array($token,$timestamp,$nonce);sort($tmpArr);$tmpStr=implode($tmpArr);$tmpStr=sha1($tmpStr);if($tmpStr==$signature){returntrue;}else{returnfalse;}}}?第三步:成为开发者验证URL有效性成功后即接入生效,成为开发者。如果公众号类型为服务号(订阅号只能使用普通消息接口),可以在公众平台网站中申请认证,认证成功的服务号将获得众多接口权限,以满足开发者需求。此后用户每次向公众号发送消息、或者产生自定义菜单点击事件时,响应URL将得到推送。公众号调用各接口时,一般会获得正确的结果,具体结果可见对应接口的说明。返回错误时,可根据返回码来查询错误原因。全局返回码说明用户向公众号发送消息时,公众号方收到的消息发送者是一个OpenID,是使用用户微信号加密后的结果,每个用户对每个公众号有一个唯一的OpenID。此外请注意,微信公众号接口只支持80接口。1.2、典型案例介绍值得借鉴的公众帐号主要是服务号,试列举并介绍如下:招商银行信用卡中心如果你是持卡人,可快捷查询信用卡账单、额度及积分;快速还款、申请账单分期;微信转接人工服务;信用卡消费,微信免费笔笔提醒。如果不是持卡人,可以微信办卡!招商银行公众号通过提示消息引导用户将自己的微信号和信用卡号安全绑定。用户可以通过该公众号查询账单、收取刷卡通知等功能,这是由招行开发人员通过公众号接口实现的功能。中国南方航空你可以办理值机手续,挑选座位,查询航班信息,查询目的地城市天气,并为明珠会员提供专业的服务。南方航空公众号可以让用户将明珠会员服务和微信号绑定起来。用户可以通过该公众号预订机票、查询订单,甚至办理登机牌。广东联通你可以在微信里绑定手机号、积分流量,套餐余量、手机上网流量,微信专属流量查询,客服咨询。广东联通公众号可以绑定手机号,来查询流量、套餐等等功能。广东联通更与微信深度合作,购买微信沃卡可以获得微信五大特权。1.3开发者规范开发者进行公众号开发时,除了需要满足每个接口的规范限制、调用频率限制外,还需特别注意模版消息、用户数据等敏感信息的使用规范。涉及用户数据时:您的服务需要收集用户任何数据的,必须事先获得用户的明确同意,且仅应当收集为运营及功能实现目的而必要的用户数据,同时应当告知用户相关数据收集的目的、范围及使用方式等,保障用户知情权。您收集用户的数据后,必须采取必要的保护措施,防止用户数据被盗、泄漏等。您在特定微信公众号中收集的用户数据仅可以在该特定微信公众号中使用,不得将其使用在该特定微信公众号之外或为其他任何目的进行使用,也不得以任何方式将其提供给他人。如果腾讯认为您收集、使用用户数据的方式,可能损害用户体验,腾讯有权要求您删除相关数据并不得再以该方式收集、使用用户数据。一旦您停止使用本服务,或腾讯基于任何原因终止您使用本服务,您必须立即删除全部因使用本服务而获得的数据(包括各种备份),且不得再以任何方式进行使用。其他规范:请勿为任何用户自动登录到微信公众平台提供代理身份验证凭据。请勿提供跟踪功能,包括但不限于识别其他用户在个人主页上查看、点击等操作行为。请勿自动将浏览器窗口定向到其他网页。请勿设置或发布任何违反相关法规、公序良俗、社会公德等的玩法、内容等。请勿公开表达或暗示,您与腾讯之间存在合作关系,包括但不限于相互持股、商业往来或合作关系等,或声称腾讯对您的认可。完整的开发者规范和接口限制,请详见开发者接口文档,以及腾讯微信公众平台开发者协议。二、基础支持2.1获取accesstokenccess_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token。正常情况下access_token有效期为7200秒,重复获取将导致上次获取的access_token失效。公众号可以使用AppID和AppSecret调用本接口来获取access_token。AppID和AppSecret可在开发模式中获得(需要已经成为开发者,且帐号没有异常状态)。注意调用所有微信接口时均需使用https协议。接口调用请求说明http请求方式:GET=client_credential&appid=APPID&secret=APPSECRET参数说明参数是否必须说明grant_type是获取access_token填写client_credentialappid是第三方用户唯一凭证secret是第三方用户唯一凭证密钥,既appsecret返回说明正常情况下,微信会返回下述JSON数据包给公众号:{access_token:ACCESS_TOKEN,expires_in:7200}参数说明access_token获取到的凭证expires_in凭证有效时间,单位:秒错误时微信会返回错误码等信息,JSON数据包示例如下(该示例为AppID无效错误):{errcode:40013,errmsg:invalidappid}2.2全局返回码说明公众号每次调用接口时,可能获得正确或错误的返回码,开发者可以根据返回码信息调试接口,排查错误。全局返回码说明如下:返回码说明-1系统繁忙0请求成功40001获取access_token时AppSecret错误,或者access_token无效40002不合法的凭证类型40003不合法的OpenID40004不合法的媒体文件类型40005不合法的文件类型40006不合法的文件大小40007不合法的媒体文件id40008不合法的消息类型40009不合法的图片文件大小40010不合法的语音文件大小40011不合法的视频文件大小40012不合法的缩略图文件大小40013不合法的APPID40014不合法的access_token40015不合法的菜单类型40016不合法的按钮个数40017不合法的按钮个数40018不合法的按钮名字长度40019不合法的按钮KEY长度40020不合法的按钮URL长度40021不合法的菜单版本号40022不合法的子菜单级数40023不合法的子菜单按钮个数40024不合法的子菜单按钮类型40025不合法的子菜单按钮名字长度40026不合法的子菜单按钮KEY长度40027不合法的子菜单按钮URL长度40028不合法的自定义菜单使用用户40029不合法的oauth_code40030不合法的refresh_token40031不合法的openid列表40032不合法的openid列表长度40033不合法的请求字符,不能包含\uxxxx格式的字符40035不合法的参数40038不合法的请求格式40039不合法的URL长度40050不合法的分组id40051分组名字不合法41001缺少access_token参数41002缺少appid参数41003缺少refresh_token参数41004缺少secret参数41005缺少多媒体文件数据41006缺少media_id参数41007缺少子菜单数据41008缺少oauth