开发者基本配置(登录首页)
1、填写服务器配置信息
基本配置
URL()填写的url要能正确的响应token信息,即验证token有效性所在的个控制器中的具体的方法
例如在tp框架中:http://www.shop.com/index.php/Home/Wx/token
token 用户自己定义(验证用户服务器用)
EncodingAESKey 随机生成的
AppID(应用ID)
wx6bca4
AppSecret(应用密钥)
65144bcd615abe6014a1e3ca9
测试号(做测试用,权限比较高)
appID
wx2ceec07b58
appsecret
608566b91ce68b2281a69c20
请注意:开启后,用户发送的消息将自动转发到该配置地址,并且在网站中设置的自动回复和自定义菜单将失效。
OpenID:为了识别用户,每个用户针对每个公众号会产生一个安全的OpenID
access_token:公众平台以access_token为接口调用凭据,来调用接口,所有接口的调用需要先获取access_token, access_token在2小时内有效,过期需要重新获取,但1天内获取次数有限,开发者需自行存储,详见获取接口调用凭据(access_token)文档。
access_token的获取:
公众号可以使用AppID和AppSecret调用本接口来获取access_token。AppID和AppSecret可在微信公众平台官网-开发页中获得(需要已经成为开发者,且帐号没有异常状态)。注意调用所有微信接口时均需使用https协议
接口调用请求说明:
http请求方式: GET
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
参数说明:
grant_type:获取access_token填写client_credential
appid:第三方用户唯一凭证
secret:第三方用户唯一凭证密钥,即appsecret
返回说明:
正常情况下,微信会返回下述JSON数据包给公众号:
{"access_token":"ACCESS_TOKEN","expires_in":7200}
access_token:获取到的凭证
expires_in:凭证有效时间,单位:秒
错误时微信会返回错误码等信息,JSON数据包示例如下(该示例为AppID无效错误):
{"errcode":40013,"errmsg":"invalid appid"}
公众号内网页
许多复杂的业务场景,需要通过网页形式来提供服务,这时需要用到:
1)网页授权获取用户基本信息:通过该接口,可以获取用户的基本信息(获取用户的OpenID是无需用户同意的,获取用户的基本信息则需用户同意)
登录微信公众平台官网后,在公众平台官网的开发-基本设置页面,勾选协议成为开发者,点击“修改配置”按钮,填写服务器地址(URL)、Token和EncodingAESKey,其中URL是开发者用来接收微信消息和事件的接口URL。Token可由开发者可以任意填写,用作生成签名(该Token会和接口URL中包含的Token进行比对,从而验证安全性)。EncodingAESKey由开发者手动填写或随机生成,将用作消息体加解密密钥。
开发步骤的第一步:
是验证token信息的有效性:
开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带参数如下表所示:
发送给商户的get参数:
signature: 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数.
timestamp: 时间戳
nonce: 随机数
echostr: 随机字符串
开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。加密/校验流程如下:
1)将token、timestamp、nonce三个参数进行字典序排序
2)将三个参数字符串拼接成一个字符串进行sha1加密
3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
检验signature的PHP示例代码:
private functioncheckSignature()
{
$signature =$_GET["signature"];
$timestamp =$_GET["timestamp"];
$nonce = $_GET["nonce"];
$token = TOKEN;(开发者填写在微信公众号设置的token值)
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr, SORT_STRING);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
if( $tmpStr == $signature){
return true;
}else{
return false;
}
}
官网文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141013&token=&lang=zh_CN