微信公众号开发demo 微信服务号开发 微信公众号接入指引 微信开发接口API 一站式开发服务 现成代码 2~3天即可上线

简体   繁體 字体:

1.  微信公众号平台开发概述

2.  微信公众号接口权限说明

3.  微信公众号接入指南 / 接入指引

4.  微信公众号平台获取access_token生成方式及使用说明

5.  微信公众号微信网页授权

6.  微信公众号平台微信JS-SDK说明文档

7.  微信公众号全局返回码说明

8.  联系我们

微信支付开发文档: https://www.cloudagiles.com/weixinzhifu-wechat-pay-api/

微信扫码登录网页开发文档: https://www.cloudagiles.com/weixin-scan-qr-code-login-website/

微信移动客服系统开发文档: https://www.cloudagiles.com/weixin-gongzhonghao-mobile-customer-service-system/

 

咨询电话:0755 – 3635 7758      开发费用:欢迎来电洽谈      上线时间: 2~3天


1. 微信公众号平台开发概述

微信公众号平台是运营者通过公众号为微信用户提供资讯和服务的平台,而公众平台开发接口则是提供服务的基础,开发者在公众号平台网站中创建公众号、获取接口权限后,可以通过阅读本接口文档来帮助开发。

为了识别用户,每个用户针对每个公众号会产生一个安全的OpenID,如果需要在多公众号、移动应用之间做用户共通,则需前往微信开放平台,将这些公众号和应用绑定到一个开放平台账号下,绑定后,一个用户虽然对多个公众号和应用有多个不同的OpenID,但他对所有这些同一开放平台账号下的公众号和应用,只有一个UnionID

请开发者注意:

① 微信公众平台开发是指为微信公众号进行业务开发,为移动应用、PC端网站、公众号第三方平台(为各行各业公众号运营者提供服务)的开发,请前往微信开放平台接入。

② 在申请到认证公众号之前,你可以先通过测试号申请系统,快速申请一个接口测试号,立即开始接口测试开发。

③ 在开发过程中,可以使用接口调试工具来在线调试某些接口。

④ 每个接口都有每日接口调用频次限制,可以在公众平台官网-开发者中心处查看具体频次。

⑤ 在开发出现问题时,可以通过接口调用的返回码,以及报警排查指引(在公众平台官网-开发者中心处可以设置接口报警),来发现和解决问题。

⑥ 公众平台以access_token为接口调用凭据,来调用接口,所有接口的调用需要先获取access_token,access_token在2小时内有效,过期需要重新获取,但1天内获取次数有限,开发者需自行存储,详见获取接口调用凭据(access_token)文档。

⑦ 公众平台接口调用仅支持80端口

公众号主要通过公众号消息会话和公众号内的网页来为用户提供服务的,下面分别介绍这两种情况:

(1)公众号消息会话

公众号是以微信用户的一个联系人形式存在的,消息会话是公众号与用户交互的基础。目前公众号内主要有这样几类消息服务的类型,分别用于不同的场景。

① 群发消息:公众号可以以一定频次(订阅号为每天1次服务号为每月4次),向用户群发消息,包括文字消息、图文消息、图片、视频、语音等。

② 被动回复消息:在用户给公众号发消息后,微信服务器会将消息发到开发者预先在开发者中心设置的服务器地址(开发者需要进行消息真实性验证),公众号可以在5秒内做出回复,可以回复一个消息,也可以回复命令告诉微信服务器这条消息暂不回复。    被动回复消息可以设置加密(在公众平台官网的开发者中心处设置,设置后,按照消息加解密文档来进行处理。其他3种消息的调用因为是API调用而不是对请求的返回,所以不需要加解密)。

③ 客服消息:在用户给公众号发消息后的48小时内,公众号可以给用户发送不限数量的消息,主要用于客服场景。用户的行为会触发事件推送,某些事件推送是支持公众号据此发送客服消息的,详见微信推送消息与事件说明文档。

④ 模板消息:在需要对用户发送服务通知(如刷卡提醒、服务预约成功通知等)时,公众号可以用特定内容模板,主动向用户发送消息。

(2)公众号内的网页

许多复杂的业务场景,需要通过网页形式来提供服务,这时需要用到:

① 网页授权获取用户基本信息:

通过该接口,可以获取用户的基本信息(获取用户的OpenID是无需用户同意的,获取用户的基本信息则需用户同意)。

② 微信JS-SDK:

是开发者在网页上通过JavaScript代码使用微信原生功能的工具包,开发者可以使用它在网页上录制和播放微信语音、监听微信分享、上传手机本地图片、拍照等许多能力。

典型案例介绍

值得借鉴的公众帐号主要是服务号,试列举并介绍如下:

照片云存储

照片云存储

照片云存储

★  在该微信服务号中,你可以上传、存储、浏览、查找、下载、删除、保存到本地、发送或共享照片给其他人,费用充值(通过微信支付),费用余额查询,照片云存储账单查询,客服咨询等。

★  注册时,只用短信验证码即可完成;不需要设置任何 用户名 密码

 

咨询电话:0755 – 3635 7758      开发费用:欢迎来电洽谈      上线时间: 2~3天


2. 微信公众号接口权限说明

不同的公众号类型具备不同的接口权限,具体如下表:

注意:

1)微博认证视作未认证,因此微博认证的公众号不会拥有微信认证公众号特有的接口。

2)微信认证分为资质认证和名称认证两部分,只需要资质认证通过,就可获得接口。

接口名称 未认证订阅号 微信认证订阅号 未认证服务号 微信认证服务号
基础支持-获取access_token
基础支持-获取微信服务器IP地址
接收消息-验证消息真实性、接收普通消息、接收事件推送、接收语音识别结果
发送消息-被动回复消息
发送消息-客服接口
发送消息-群发接口
发送消息-模板消息接口(发送业务通知)
用户管理-用户分组管理
用户管理-设置用户备注名
用户管理-获取用户基本信息
用户管理-获取用户列表
用户管理-获取用户地理位置
用户管理-网页授权获取用户openid/用户基本信息
推广支持-生成带参数二维码
推广支持-长链接转短链接口
界面丰富-自定义菜单
素材管理-素材管理接口
智能接口-语义理解接口
多客服-获取多客服消息记录、客服管理
微信支付接口 需申请
微信小店接口 需申请
微信卡券接口 需申请 需申请
微信设备功能接口 需申请
微信JS-SDK-基础接口
微信JS-SDK-分享接口
微信JS-SDK-图像接口
微信JS-SDK-音频接口
微信JS-SDK-智能接口(网页语音识别)
微信JS-SDK-设备信息
微信JS-SDK-地理位置
微信JS-SDK-界面操作
微信JS-SDK-微信扫一扫
微信JS-SDK-微信小店
微信JS-SDK-微信卡券
微信JS-SDK-微信支付

 

咨询电话:0755 – 3635 7758      开发费用:欢迎来电洽谈      上线时间: 2~3天


3. 微信公众号接入指南 / 接入指引

(1)接入概述

接入微信公众平台开发,开发者需要按照如下步骤完成:

A、填写服务器配置

B、验证服务器地址的有效性

C、依据接口文档实现业务逻辑

下面详细介绍这三个步骤。

第一步: 填写服务器配置

登录微信公众平台官网后,在公众平台官网的开发-基本设置页面,勾选协议成为开发者,点击“修改配置”按钮,填写服务器地址URL、Token和EncodingAESKey:

URL是开发者用来接收微信消息和事件的接口URL。

Token可由开发者可以任意填写,用作生成签名(该Token会和接口URL中包含的Token进行比对,从而验证安全性)。

EncodingAESKey由开发者手动填写或随机生成,将用作消息体加解密密钥。

同时,开发者可选择消息加解密方式:明文模式、兼容模式和安全模式。模式的选择与服务器配置在提交后都会立即生效,请开发者谨慎填写及选择。加解密方式的默认状态为明文模式,选择兼容模式和安全模式需要提前配置好相关加解密代码。

填写微信公众号服务器配置

 

第二步: 验证消息的确来自微信服务器

开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上。

GET请求携带参数说明如下表所示:

参数 描述
signature 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
timestamp 时间戳
nonce 随机数
echostr 随机字符串

 

开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。

加密/校验流程如下:

1)将token、timestamp、nonce三个参数进行字典序排序

2)将三个参数字符串拼接成一个字符串进行sha1加密

3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

 

检验signature的PHP示例代码:

private function checkSignature()

{

$signature = $this->input->get(‘signature’);
$timestamp = $this->input->get(‘timestamp’);
$nonce = $this->input->get(‘nonce’);
$echostr = $this->input->get(‘echostr’);

$tmpArr = array(self::$wx_token, $timestamp, $nonce);
sort($tmpArr, SORT_STRING);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );

if ($tmpStr === $signature) {
return true;
} else {
return false;
}

}

 

第三步: 依据接口文档实现业务逻辑

验证URL有效性成功后即接入生效,成为开发者。你可以在公众平台网站中申请微信认证,认证成功后,将获得更多接口权限,满足更多业务需求。

成为开发者后,用户每次向公众号发送消息、或者产生自定义菜单、或产生微信支付订单等情况时,开发者填写的服务器配置URL将得到微信服务器推送过来的消息和事件,开发者可以依据自身业务逻辑进行响应,如回复消息。

公众号调用各接口时,一般会获得正确的结果,具体结果可见对应接口的说明。返回错误时,可根据返回码来查询错误原因。

用户向公众号发送消息时,公众号方收到的消息发送者是一个OpenID,是使用用户微信号加密后的结果,每个用户对每个公众号有一个唯一的OpenID

此外,由于开发者经常有需在多个平台(移动应用、网站、公众帐号)之间共通用户帐号,统一帐号体系的需求,微信开放平台(open.weixin.qq.com)提供了UnionID机制。开发者可通过OpenID来获取用户基本信息,而如果开发者拥有多个应用(移动应用、网站应用和公众帐号,公众帐号只有在被绑定到微信开放平台帐号下后,才会获取UnionID),可通过获取用户基本信息中的UnionID来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号,用户的UnionID是唯一的。

换句话说,同一用户,对同一个微信开放平台帐号下的不同应用,UnionID是相同的。详情请在微信开放平台的资源中心-移动应用开发-微信登录-授权关系接口调用指引-获取用户个人信息(UnionID机制)中查看。

注意:

微信公众号接口必须以http://https://开头,分别支持80端口和443端口。

 

咨询电话:0755 – 3635 7758      开发费用:欢迎来电洽谈      上线时间: 2~3天


4. 微信公众号平台获取access_token生成方式及使用说明

access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存,防止泄露。

access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。

公众平台的API调用所需的access_token的使用及生成方式说明:

(1)建议公众号开发者使用中控服务器统一获取和刷新Access_token,其他业务逻辑服务器所使用的access_token均来自于该中控服务器,不应该各自去刷新,否则容易造成冲突,导致access_token覆盖而影响业务;

(2)目前Access_token的有效期通过返回的expire_in来传达,目前是7200秒之内的值。中控服务器需要根据这个有效时间提前去刷新新access_token。在刷新过程中,中控服务器对外输出的依然是老access_token,此时公众平台后台会保证在刷新短时间内,新老access_token都可用,这保证了第三方业务的平滑过渡;

(3)Access_token的有效时间可能会在未来有调整,所以中控服务器不仅需要内部定时主动刷新,还需要提供被动刷新access_token的接口,这样便于业务服务器在API调用获知access_token已超时的情况下,可以触发access_token的刷新流程。

公众号可以使用AppID和AppSecret调用本接口来获取access_token。AppID和AppSecret可在“微信公众平台-开发-基本配置”页中获得(需要已经成为开发者,且帐号没有异常状态)。

调用接口时,请登录“微信公众平台-开发-基本配置”提前将服务器IP地址添加到IP白名单中,点击查看设置方法,否则将无法调用成功。

接口调用请求说明:

https请求方式: 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

 

返回说明:

A. 正常情况下,微信会返回下述JSON数据包给公众号:

{“access_token”:”ACCESS_TOKEN”,”expires_in”:7200}

参数说明:

参数 说明
access_token 获取到的凭证
expires_in 凭证有效时间,单位:秒

 

B. 错误时微信会返回错误码等信息,JSON数据包示例如下(该示例为AppID无效错误):

{“errcode”:40013,”errmsg”:”invalid appid”}

返回码说明:

返回码 说明
-1 系统繁忙,此时请开发者稍候再试
0 请求成功
40001 AppSecret错误或者AppSecret不属于这个公众号,请开发者确认AppSecret的正确性
40002 请确保grant_type字段值为client_credential
40164 调用接口的IP地址不在白名单中,请在接口IP白名单中进行设置

 

咨询电话:0755 – 3635 7758      开发费用:欢迎来电洽谈      上线时间: 2~3天


5. 微信公众号微信网页授权

如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑。

关于网页授权回调域名的说明:

1)在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的“开发 – 接口权限 – 网页服务 – 网页帐号 – 网页授权获取用户基本信息”的配置选项中,修改授权回调域名。请注意,这里填写的是域名(是一个字符串),而不是URL,因此请勿加 http:// 等协议头;

2)授权回调域名配置规范为全域名,比如需要网页授权的域名为:www.cloudagiles.com,配置以后此域名下面的页面http://www.cloudagiles.com/music.html 、 http://www.cloudagiles.com/login.html 都可以进行OAuth2.0鉴权。但http://pay.cloudagiles.com 、 http://music.cloudagiles.com 、 http://cloudagiles.com无法进行OAuth2.0鉴权;

3)如果公众号登录授权给了第三方开发者来进行管理,则不必做任何设置,由第三方代替公众号实现网页授权即可。

关于网页授权的两种scope的区别说明:

1)以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页的。用户感知的就是直接进入了回调页(往往是业务页面)

2)以snsapi_userinfo为scope发起的网页授权,是用来获取用户的基本信息的。但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的基本信息。

3)用户管理类接口中的“获取用户基本信息接口”,是在用户和公众号产生消息交互或关注后事件推送后,才能根据用户OpenID来获取用户基本信息。这个接口,包括其他微信接口,都是需要该用户(即openid)关注了公众号后,才能调用成功的。

关于网页授权access_token(A)和普通access_token(B)的区别说明:

1)微信网页授权是通过OAuth2.0机制实现的,在用户授权给公众号后,公众号可以获取到一个网页授权特有的接口调用凭证( 网页授权access_token(A) ),通过网页授权access_token(A)可以进行授权后接口调用,如获取用户基本信息;

2)其他微信接口,需要通过基础支持中的“获取access_token(B)”接口来获取到的普通access_token(B)调用。

关于UnionID机制:

1)请注意,网页授权获取用户基本信息也遵循UnionID机制。即如果开发者有在多个公众号,或在公众号、移动应用之间统一用户帐号的需求,需要前往微信开放平台(open.weixin.qq.com)绑定公众号后,才可利用UnionID机制来满足上述需求。

2)UnionID机制的作用说明:如果开发者拥有多个移动应用、网站应用和公众帐号,可通过获取用户基本信息中的unionid来区分用户的唯一性,因为同一用户,对同一个微信开放平台下的不同应用(移动应用、网站应用和公众帐号),unionid是相同的。

关于特殊场景下的静默授权:

1)上面已经提到,对于以snsapi_base为scope的网页授权,就静默授权的,用户无感知;

2)对于已关注公众号的用户,如果用户从公众号的会话或者自定义菜单进入本公众号的网页授权页,即使是scope为snsapi_userinfo,也是静默授权,用户无感知。

具体而言,微信网页授权流程分为四步:

1)引导用户进入微信授权页面,用户同意授权,获取code

2)通过code换取微信网页授权access_token(A)(与基础支持中的access_token(B)不同)

3)如果需要,开发者可以刷新微信网页授权access_token(A),避免过期

4)通过网页授权access_token(A)和openid,获取/拉取用户基本信息(需scope为 snsapi_userinfo)(支持UnionID机制)

附:检验授权凭证(access_token(A))是否有效

第一步:引导用户进入微信授权页面,用户同意授权,获取code

在确保微信公众账号拥有授权作用域(scope参数)的权限的前提下(服务号获得高级接口后,默认拥有scope参数中的snsapi_base和snsapi_userinfo),引导关注者打开如下页面:

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

若提示“该链接无法访问”,请检查参数是否填写错误,是否拥有scope参数对应的授权作用域权限。

注意:由于授权操作安全等级较高,所以在发起授权请求时,微信会对授权链接做正则强匹配校验,如果链接的参数顺序不对,授权页面将无法正常访问。

注意:跳转回调redirect_uri,应当使用https链接来确保授权code的安全性。

参数说明

参数 是否必须 说明
appid 公众号的唯一标识
redirect_uri 授权后重定向的回调链接地址,请使用urlEncode对链接进行处理
response_type 返回类型,请填写code
scope 应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且,即使在未关注的情况下,只要用户授权,也能获取其信息)
state 重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节
#wechat_redirect 无论直接打开还是做页面302重定向时候,必须带此参数

 

下图为scope等于snsapi_userinfo时的授权页面:

微信授权页面

 

用户同意授权后:

如果用户同意授权,页面将跳转至

redirect_uri/?code=CODE&state=STATE

code说明: code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。

 

第二步:通过code换取微信网页授权access_token(A)

首先请注意,这里通过code换取的是一个特殊的网页授权access_token,与基础支持中的access_token(该access_token用于调用其他接口)不同。

公众号可通过下述接口来获取网页授权access_token。如果网页授权的作用域为snsapi_base,则本步骤中获取到网页授权access_token的同时,也获取到了openid,snsapi_base式的网页授权流程即到此为止。

注意:由于公众号的secret和获取到的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

参数说明

参数 是否必须 说明
appid 公众号的唯一标识
secret 公众号的appsecret
code 填写第一步获取的code参数
grant_type 填写为authorization_code

返回说明

A)正确时返回的JSON数据包如下:

{

“access_token”:”ACCESS_TOKEN”,

“expires_in”:7200,

“refresh_token”:”REFRESH_TOKEN”,

“openid”:”OPENID”,

“scope”:”SCOPE”

}

参数 描述
access_token 网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同
expires_in access_token接口调用凭证超时时间,单位(秒)
refresh_token 用户刷新access_token
openid 用户唯一标识,请注意,在未关注公众号时,用户访问公众号的网页,也会产生一个用户和公众号唯一的OpenID
scope 用户授权的作用域,使用逗号(,)分隔

 

B)错误时微信会返回JSON数据包如下(示例为Code无效错误):

{“errcode”:40029,”errmsg”:”invalid code”}

 

第三步:如果需要,开发者可以刷新微信网页授权access_token(A),避免过期

由于access_token拥有较短的有效期,当access_token超时后,可以使用refresh_token进行刷新,refresh_token有效期为30天,当refresh_token失效之后,需要用户重新授权。

请求方法

获取第二步的refresh_token后,请求以下链接获取access_token:

https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN

参数 是否必须 说明
appid 公众号的唯一标识
grant_type 填写为refresh_token
refresh_token 填写通过access_token获取到的refresh_token参数

返回说明

A)正确时返回的JSON数据包如下:

{

“access_token”:”ACCESS_TOKEN”,

“expires_in”:7200,

“refresh_token”:”REFRESH_TOKEN”,

“openid”:”OPENID”,

“scope”:”SCOPE”

}

参数 描述
access_token 网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同
expires_in access_token接口调用凭证超时时间,单位(秒)
refresh_token 用户刷新access_token
openid 用户唯一标识
scope 用户授权的作用域,使用逗号(,)分隔

 

B)错误时微信会返回JSON数据包如下(示例为code无效错误):

{“errcode”:40029,”errmsg”:”invalid code”}

 

第四步:通过网页授权access_token(A)和openid,获取/拉取用户基本信息

如果网页授权作用域为snsapi_userinfo,则此时开发者可以通过access_token和openid拉取用户信息了。

请求方法

http:GET(请使用https协议)

https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

参数说明

参数 描述
access_token 网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同
openid 用户的唯一标识
lang 返回国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语

返回说明

A)正确时返回的JSON数据包如下:

{

“openid”:” OPENID”,

” nickname”: NICKNAME,

“sex”:”1″,

“province”:”PROVINCE”

“city”:”CITY”,

“country”:”COUNTRY”,

“headimgurl”:    ”http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ

4eMsv84eavHiaiceqxibJxCfHe/46″,

“privilege”:[ "PRIVILEGE1" "PRIVILEGE2"     ],

“unionid”: “o6_bmasdasdsad6_2sgVt7hMZOPfL”

}

参数 描述
openid 用户的唯一标识
nickname 用户昵称
sex 用户的性别,值为1时是男性,值为2时是女性,值为0时是未知
province 用户个人资料填写的省份
city 普通用户个人资料填写的城市
country 国家,如中国为CN
headimgurl 用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空。若用户更换头像,原有头像URL将失效。
privilege 用户特权信息,json 数组,如微信沃卡用户为(chinaunicom)
unionid 只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段。

 

B)错误时微信会返回JSON数据包如下(示例为openid无效):

{“errcode”:40003,”errmsg”:” invalid openid “}

 

附:检验授权凭证(access_token)是否有效

请求方法

http:GET(请使用https协议)

https://api.weixin.qq.com/sns/auth?access_token=ACCESS_TOKEN&openid=OPENID

参数说明

参数 描述
access_token 网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同
openid 用户的唯一标识

返回说明

A)正确的JSON返回结果:

{ “errcode”:0,”errmsg”:”ok”}

B)错误时的JSON返回示例:

{ “errcode”:40003,”errmsg”:”invalid openid”}

 

F.A.Q

1.  什么是授权临时票据(code)?

答:第三方通过code进行获取access_token的时候需要用到,code的超时时间为10分钟,一个code只能成功换取一次access_token即失效。code的临时性和一次保障了微信授权登录的安全性。第三方可通过使用https和state参数,进一步加强自身授权登录的安全性。

2.  什么是授权作用域(scope)?

答:授权作用域(scope)代表用户授权给第三方的接口权限,第三方应用需要向微信开放平台申请使用相应scope的权限后,使用文档所述方式让用户进行授权,经过用户授权,获取到相应access_token后方可对接口进行调用。

3.  开放平台移动应用微信登陆目前是否收费?

答:“微信登录”和第三方网站共享微信庞大的用户价值,同时为微信用户提供更便捷服务和更优质内容,实现双向共赢,目前不收取任何费用。

 

咨询电话:0755 – 3635 7758      开发费用:欢迎来电洽谈      上线时间: 2~3天


6. 微信公众号平台微信JS-SDK说明文档

微信JS-SDK是微信公众号平台面向网页开发者提供的基于微信内的网页开发工具包。

通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照、选图、语音、位置等手机系统的能力,同时可以直接使用微信分享、扫一扫、卡券、支付等微信特有的能力,为微信用户提供更优质的网页体验。

JSSDK使用步骤

步骤一: 绑定域名

先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。

备注:登录后可在“开发者中心”查看对应的接口权限。

步骤二: 引入JS文件

在需要调用JS接口的页面引入如下JS文件(支持https):

http://res.wx.qq.com/open/js/jweixin-1.2.0.js

备注:支持使用 AMD/CMD 标准模块加载方法加载

步骤三: 通过config接口注入权限验证配置

所有需要使用JS-SDK的页面必须先注入配置信息,否则将无法调用(同一个url仅需调用一次,对于变化url的SPA的web app可在每次url变化时进行调用)。

wx.config({

debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。

appId: ”, // 必填,公众号的唯一标识

timestamp: , // 必填,生成签名的时间戳

nonceStr: ”, // 必填,生成签名的随机串

signature: ”,// 必填,签名,见附录1

jsApiList: [] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2

});

步骤四: 通过ready接口处理成功验证

wx.ready(function(){

// config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。

});

步骤五: 通过error接口处理失败验证

wx.error(function(res){

// config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。

});

接口调用说明:

所有接口通过wx对象(也可使用jWeixin对象)来调用,参数是一个对象,除了每个接口本身需要传的参数之外,还有以下通用参数:

1. success:接口调用成功时执行的回调函数。

2. fail:接口调用失败时执行的回调函数。

3. complete:接口调用完成时执行的回调函数,无论成功或失败都会执行。

4. cancel:用户点击取消时的回调函数,仅部分有用户取消操作的api才会用到。

5. trigger: 监听Menu中的按钮点击时触发的方法,该方法仅支持Menu中的相关接口。

备注:不要尝试在trigger中使用ajax异步请求修改本次分享的内容,因为客户端分享操作是一个同步操作,这时候使用ajax的回包会还没有返回。

以上几个函数都带有一个参数,类型为对象,其中除了每个接口本身返回的数据之外,还有一个通用属性errMsg,其值格式如下:

调用成功时:”xxx:ok” ,其中xxx为调用的接口名

用户取消时:”xxx:cancel”,其中xxx为调用的接口名

调用失败时:其值为具体错误信息

基础接口

判断当前客户端版本是否支持指定JS接口

wx.checkJsApi({

jsApiList: ['chooseImage'], // 需要检测的JS接口列表,所有JS接口列表见附录2,

success: function(res) {

// 以键值对的形式返回,可用的api值true,不可用为false

// 如:{“checkResult”:{“chooseImage”:true},”errMsg”:”checkJsApi:ok”}

}

});

备注:checkJsApi接口是客户端6.0.2新引入的一个预留接口,第一期开放的接口均可不使用checkJsApi来检测。

分享接口

获取“分享到朋友圈”按钮点击状态及自定义分享内容接口

wx.onMenuShareTimeline({

title: ”, // 分享标题

link: ”, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致

imgUrl: ”, // 分享图标

success: function () {

// 用户确认分享后执行的回调函数

},

cancel: function () {

// 用户取消分享后执行的回调函数

}

});

获取“分享给朋友”按钮点击状态及自定义分享内容接口

wx.onMenuShareAppMessage({

title: ”, // 分享标题

desc: ”, // 分享描述

link: ”, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致

imgUrl: ”, // 分享图标

type: ”, // 分享类型,music、video或link,不填默认为link

dataUrl: ”, // 如果type是music或video,则要提供数据链接,默认为空

success: function () {

// 用户确认分享后执行的回调函数

},

cancel: function () {

// 用户取消分享后执行的回调函数

}

});

图像接口

拍照或从手机相册中选图接口

wx.chooseImage({

count: 1, // 默认9

sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有

sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有

success: function (res) {

var localIds = res.localIds; // 返回选定照片的本地ID列表,localId可以作为img标签的src属性显示图片

}

});

预览图片接口

wx.previewImage({

current: ”, // 当前显示图片的http链接

urls: [] // 需要预览的图片http链接列表

});

上传图片接口

wx.uploadImage({

localId: ”, // 需要上传的图片的本地ID,由chooseImage接口获得

isShowProgressTips: 1, // 默认为1,显示进度提示

success: function (res) {

var serverId = res.serverId; // 返回图片的服务器端ID

}

});

备注:上传图片有效期3天,可用微信多媒体接口下载图片到自己的服务器,此处获得的 serverId 即 media_id。

下载图片接口

wx.downloadImage({

serverId: ”, // 需要下载的图片的服务器端ID,由uploadImage接口获得

isShowProgressTips: 1, // 默认为1,显示进度提示

success: function (res) {

var localId = res.localId; // 返回图片下载后的本地ID

}

});

获取本地图片接口

wx.getLocalImgData({

localId: ”, // 图片的localID

success: function (res) {

var localData = res.localData; // localData是图片的base64数据,可以用img标签显示

}

});

音频接口

开始录音接口

wx.startRecord();

停止录音接口

wx.stopRecord({

success: function (res) {

var localId = res.localId;

}

});

监听录音自动停止接口

wx.onVoiceRecordEnd({

// 录音时间超过一分钟没有停止的时候会执行 complete 回调

complete: function (res) {

var localId = res.localId;

}

});

播放语音接口

wx.playVoice({

localId: ” // 需要播放的音频的本地ID,由stopRecord接口获得

});

暂停播放接口

wx.pauseVoice({

localId: ” // 需要暂停的音频的本地ID,由stopRecord接口获得

});

停止播放接口

wx.stopVoice({

localId: ” // 需要停止的音频的本地ID,由stopRecord接口获得

});

上传语音接口

wx.uploadVoice({

localId: ”, // 需要上传的音频的本地ID,由stopRecord接口获得

isShowProgressTips: 1, // 默认为1,显示进度提示

success: function (res) {

var serverId = res.serverId; // 返回音频的服务器端ID

}

});

备注:上传语音有效期3天,可用微信多媒体接口下载语音到自己的服务器,此处获得的 serverId 即 media_id,参考文档 .目前多媒体文件下载接口的频率限制为10000次/天,如需要调高频率,请登录微信公众平台,在开发 – 接口权限的列表中,申请提高临时上限。

公众号开发接口权限

下载语音接口

wx.downloadVoice({

serverId: ”, // 需要下载的音频的服务器端ID,由uploadVoice接口获得

isShowProgressTips: 1, // 默认为1,显示进度提示

success: function (res) {

var localId = res.localId; // 返回音频的本地ID

}

});

设备信息

获取网络状态接口

wx.getNetworkType({

success: function (res) {

var networkType = res.networkType; // 返回网络类型2g,3g,4g,wifi

}

});

地理位置

使用微信内置地图查看位置接口

wx.openLocation({

latitude: 0, // 纬度,浮点数,范围为90 ~ -90

longitude: 0, // 经度,浮点数,范围为180 ~ -180。

name: ”, // 位置名

address: ”, // 地址详情说明

scale: 1, // 地图缩放级别,整形值,范围从1~28。默认为最大

infoUrl: ” // 在查看位置界面底部显示的超链接,可点击跳转

});

获取地理位置接口

wx.getLocation({

type: ‘wgs84′, // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入’gcj02′

success: function (res) {

var latitude = res.latitude; // 纬度,浮点数,范围为90 ~ -90

var longitude = res.longitude; // 经度,浮点数,范围为180 ~ -180。

var speed = res.speed; // 速度,以米/每秒计

var accuracy = res.accuracy; // 位置精度

}

});

界面操作

关闭当前网页窗口接口

wx.closeWindow();

批量隐藏功能按钮接口

wx.hideMenuItems({

menuList: [] // 要隐藏的菜单项,只能隐藏“传播类”和“保护类”按钮,所有menu项见附录3

});

批量显示功能按钮接口

wx.showMenuItems({

menuList: [] // 要显示的菜单项,所有menu项见附录3

});

隐藏所有非基础按钮接口

wx.hideAllNonBaseMenuItem();

显示所有功能按钮接口

wx.showAllNonBaseMenuItem();

微信扫一扫

调起微信扫一扫接口

wx.scanQRCode({

needResult: 0, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,

scanType: ["qrCode","barCode"], // 可以指定扫二维码还是一维码,默认二者都有

success: function (res) {

var result = res.resultStr; // 当needResult 为 1 时,扫码返回的结果

}

});

微信支付

发起一个微信支付请求

wx.chooseWXPay({

timestamp: 0, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符

nonceStr: ”, // 支付签名随机串,不长于 32 位

package: ”, // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=***)

signType: ”, // 签名方式,默认为’SHA1′,使用新版支付需传入’MD5′

paySign: ”, // 支付签名

success: function (res) {

// 支付成功后的回调函数

}

});

备注:

prepay_id 通过微信支付统一下单接口拿到,paySign 采用统一的微信支付 Sign 签名生成方法,注意这里 appId 也要参与签名,appId 与 config 中传入的 appId 一致,即最后参与签名的参数有appId, timeStamp, nonceStr, package, signType。

微信支付开发文档:https://www.cloudagiles.com/weixinzhifu-wechat-pay-api/

附录1 JS-SDK使用权限签名算法

jsapi_ticket

生成签名之前必须先了解一下jsapi_ticket,jsapi_ticket是公众号用于调用微信JS接口的临时票据。正常情况下,jsapi_ticket的有效期为7200秒,通过access_token来获取。由于获取jsapi_ticket的api调用次数非常有限,频繁刷新jsapi_ticket会导致api调用受限,影响自身业务,开发者必须在自己的服务全局缓存jsapi_ticket 。

1) 参考以下文档获取access_token(有效期7200秒,开发者必须在自己的服务全局缓存access_token):../15/54ce45d8d30b6bf6758f68d2e95bc627.html

2) 用第一步拿到的access_token 采用http GET方式请求获得jsapi_ticket(有效期7200秒,开发者必须在自己的服务全局缓存jsapi_ticket):https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi

成功返回如下JSON:

{

“errcode”:0,

“errmsg”:”ok”,

“ticket”:”bxLdikRXVbTPdHSM05e5u5sUoXNKd8-41ZO3MhKoyN5OfkWITDGgnr2fwJ0m9E8NYzWKVZvdVtaUgWvsdshFKA”,

“expires_in”:7200

}

获得jsapi_ticket之后,就可以生成JS-SDK权限验证的签名了。

签名算法

签名生成规则如下:参与签名的字段包括noncestr(随机字符串), 有效的jsapi_ticket, timestamp(时间戳), url(当前网页的URL,不包含#及其后面部分) 。对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1。这里需要注意的是所有参数名均为小写字符。对string1作sha1加密,字段名和字段值都采用原始值,不进行URL 转义。

即signature=sha1(string1)。 示例:

noncestr=Wm3WZYTPz0wzccnW

jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg

timestamp=1414587457

url=http://mp.weixin.qq.com?params=value

步骤1.  对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1:

jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg&noncestr=Wm3WZYTPz0wzccnW&timestamp=1414587457&url=http://mp.weixin.qq.com?params=value

步骤2.  对string1进行sha1签名,得到signature:

0f9de62fce790f9a083d5c99e95740ceb90c27ed

注意事项:

1. 签名用的noncestr和timestamp必须与wx.config中的nonceStr和timestamp相同。

2. 签名用的url必须是调用JS接口页面的完整URL。

3. 出于安全考虑,开发者必须在服务器端实现签名的逻辑。

附录2  所有JS接口列表

版本1.0.0接口

onMenuShareTimeline

onMenuShareAppMessage

onMenuShareQQ

onMenuShareWeibo

onMenuShareQZone

startRecord

stopRecord

onVoiceRecordEnd

playVoice

pauseVoice

stopVoice

onVoicePlayEnd

uploadVoice

downloadVoice

chooseImage

previewImage

uploadImage

downloadImage

translateVoice

getNetworkType

openLocation

getLocation

hideOptionMenu

showOptionMenu

hideMenuItems

showMenuItems

hideAllNonBaseMenuItem

showAllNonBaseMenuItem

closeWindow

scanQRCode

chooseWXPay

openProductSpecificView

addCard

chooseCard

openCard

附录3  所有菜单项列表

基本类

举报: “menuItem:exposeArticle”

调整字体: “menuItem:setFont”

日间模式: “menuItem:dayMode”

夜间模式: “menuItem:nightMode”

刷新: “menuItem:refresh”

查看公众号(已添加): “menuItem:profile”

查看公众号(未添加): “menuItem:addContact”

传播类

发送给朋友: “menuItem:share:appMessage”

分享到朋友圈: “menuItem:share:timeline”

分享到QQ: “menuItem:share:qq”

分享到Weibo: “menuItem:share:weiboApp”

收藏: “menuItem:favorite”

分享到FB: “menuItem:share:facebook”

分享到 QQ 空间/menuItem:share:QZone

保护类

编辑标签: “menuItem:editTag”

删除: “menuItem:delete”

复制链接: “menuItem:copyUrl”

原网页: “menuItem:originPage”

阅读模式: “menuItem:readMode”

在QQ浏览器中打开: “menuItem:openWithQQBrowser”

在Safari中打开: “menuItem:openWithSafari”

邮件: “menuItem:share:email”

一些特殊公众号: “menuItem:share:brand”

签名说明

1. 将 api_ticket、timestamp、card_id、code、openid、nonce_str的value值进行字符串的字典序排序。

2. 将所有参数字符串拼接成一个字符串进行sha1加密,得到signature。

3. signature中的timestamp,nonce字段和card_ext中的timestamp,nonce_str字段必须保持一致。

4. code=1434008071,timestamp=1404896688,card_id=pjZ8Yt1XGILfi-FUsewpnnolGgZk, api_ticket=ojZ8YtyVyr30HheH3CM73y7h4jJE ,nonce_str=123 则signature=sha1(12314048966881434008071ojZ8YtyVyr30HheH3CM73y7h4jJE pjZ8Yt1XGILfi-FUsewpnnolGgZk)=d9ef8e3010c894d785c667efdcdd10e0260bf014。

强烈建议开发者使用卡券资料包中的签名工具SDK进行签名或使用debug工具进行校验:http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=cardsign

附录4  常见错误及解决方法

调用config 接口的时候传入参数 debug: true 可以开启debug模式,页面会alert出错误信息。以下为常见错误及解决方法:

1. invalid url domain当前页面所在域名与使用的appid没有绑定,请确认正确填写绑定的域名,仅支持80(http)和443(https)两个端口,因此不需要填写端口号(一个appid可以绑定三个有效域名)。

2. invalid signature签名错误。建议按如下顺序检查:

a. 确认签名算法正确,可用 http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign 页面工具进行校验。

b. 确认config中nonceStr(js中驼峰标准大写S), timestamp与用以签名中的对应noncestr, timestamp一致。

c. 确认url是页面完整的url(请在当前页面alert(location.href.split(‘#’)[0])确认),包括’http(s)://’部分,以及’?’后面的GET参数部分,但不包括’#'hash后面的部分。

d. 确认 config 中的 appid 与用来获取 jsapi_ticket 的 appid 一致。

e. 确保一定缓存access_token和jsapi_ticket。

f. 确保你获取用来签名的url是动态获取的,动态页面可参见实例代码中php的实现方式。如果是html的静态页面在前端通过ajax将url传到后台签名,前端需要用js获取当前页面除去’#'hash部分的链接(可用location.href.split(‘#’)[0]获取,而且需要encodeURIComponent),因为页面一旦分享,微信客户端会在你的链接末尾加入其它参数,如果不是动态获取当前链接,将导致分享后的页面签名失败。

3. the permission value is offline verifying这个错误是因为config没有正确执行,或者是调用的JSAPI没有传入config的jsApiList参数中。建议按如下顺序检查:

a. 确认config正确通过。

b. 如果是在页面加载好时就调用了JSAPI,则必须写在wx.ready的回调中。

c. 确认config的jsApiList参数包含了这个JSAPI。

4. permission denied该公众号没有权限使用这个JSAPI,或者是调用的JSAPI没有传入config的jsApiList参数中(部分接口需要认证之后才能使用)。

5. function not exist当前客户端版本不支持该接口,请升级到新版体验。

6. 为什么6.0.1版本config:ok,但是6.0.2版本之后不ok(因为6.0.2版本之前没有做权限验证,所以config都是ok,但这并不意味着你config中的签名是OK的,请在6.0.2检验是否生成正确的签名以保证config在高版本中也ok。)

7. 在iOS和Android都无法分享(请确认公众号已经认证,只有认证的公众号才具有分享相关接口权限,如果确实已经认证,则要检查监听接口是否在wx.ready回调函数中触发)

8. 服务上线之后无法获取jsapi_ticket,自己测试时没问题。(因为access_token和jsapi_ticket必须要在自己的服务器缓存,否则上线后会触发频率限制。请确保一定对token和ticket做缓存以减少2次服务器请求,不仅可以避免触发频率限制,还加快你们自己的服务速度。目前为了方便测试提供了1w的获取量,超过阀值后,服务将不再可用,请确保在服务上线前一定全局缓存access_token和jsapi_ticket,两者有效期均为7200秒,否则一旦上线触发频率限制,服务将不再可用)。

9. uploadImage怎么传多图(目前只支持一次上传一张,多张图片需等前一张图片上传之后再调用该接口)

10. 没法对本地选择的图片进行预览(chooseImage接口本身就支持预览,不需要额外支持)

11. 通过a链接(例如先通过微信授权登录)跳转到b链接,invalid signature签名失败(后台生成签名的链接为使用jssdk的当前链接,也就是跳转后的b链接,请不要用微信登录的授权链接进行签名计算,后台签名的url一定是使用jssdk的当前页面的完整url除去’#'部分)

12. 出现config:fail错误(这是由于传入的config参数不全导致,请确保传入正确的appId、timestamp、nonceStr、signature和需要使用的jsApiList)

13. 如何把jsapi上传到微信的多媒体资源下载到自己的服务器

14. Android通过jssdk上传到微信服务器,第三方再从微信下载到自己的服务器,会出现杂音(微信团队已经修复此问题,目前后台已优化上线)

15. 绑定父级域名,是否其子域名也是可用的(是的,合法的子域名在绑定父域名之后是完全支持的)

16. 在iOS微信6.1版本中,分享的图片外链不显示,只能显示公众号页面内链的图片或者微信服务器的图片,已在6.2中修复

17. 是否需要对低版本自己做兼容(jssdk都是兼容低版本的,不需要第三方自己额外做更多工作,但有的接口是6.0.2新引入的,只有新版才可调用)

18. 该公众号支付签名无效,无法发起该笔交易(请确保你使用的jweixin.js是官方线上版本,不仅可以减少用户流量,还有可能对某些bug进行修复,拷贝到第三方服务器中使用,官方将不对其出现的任何问题提供保障)

19. 目前Android微信客户端不支持pushState的H5新特性,所以使用pushState来实现web app的页面会导致签名失败,此问题已在Android6.2中修复

20. uploadImage在chooseImage的回调中有时候Android会不执行,Android6.2会解决此问题,若需支持低版本可以把调用uploadImage放在setTimeout中延迟100ms解决

21. require subscribe错误说明你没有订阅该测试号,该错误仅测试号会出现

22. getLocation返回的坐标在openLocation有偏差,因为getLocation返回的是gps坐标,openLocation打开的腾讯地图为火星坐标,需要第三方自己做转换,6.2版本开始已经支持直接获取火星坐标

23. 查看公众号(未添加): “menuItem:addContact”不显示,目前仅有从公众号传播出去的链接才能显示,来源必须是公众号

24. ICP备案数据同步有一天延迟,所以请在第二日绑定

咨询电话:0755 – 3635 7758      开发费用:欢迎来电洽谈      上线时间: 2~3天


7. 微信公众号全局返回码说明

公众号每次调用接口时,可能获得正确或错误的返回码,开发者可以根据返回码信息调试接口,排查错误。

全局返回码数值说明如下:

返回码 说明
-1 系统繁忙,此时请开发者稍候再试
0 请求成功
40001 获取access_token时AppSecret错误,或者access_token无效。请开发者认真比对AppSecret的正确性,或查看是否正在为恰当的公众号调用接口
40002 不合法的凭证类型
40003 不合法的OpenID,请开发者确认OpenID(该用户)是否已关注公众号,或是否是其他公众号的OpenID
40004 不合法的媒体文件类型
40005 不合法的文件类型
40006 不合法的文件大小
40007 不合法的媒体文件id
40008 不合法的消息类型
40009 不合法的图片文件大小
40010 不合法的语音文件大小
40011 不合法的视频文件大小
40012 不合法的缩略图文件大小
40013 不合法的AppID,请开发者检查AppID的正确性,避免异常字符,注意大小写
40014 不合法的access_token,请开发者认真比对access_token的有效性(如是否过期),或查看是否正在为恰当的公众号调用接口
40015 不合法的菜单类型
40016 不合法的按钮个数
40017 不合法的按钮个数
40018 不合法的按钮名字长度
40019 不合法的按钮KEY长度
40020 不合法的按钮URL长度
40021 不合法的菜单版本号
40022 不合法的子菜单级数
40023 不合法的子菜单按钮个数
40024 不合法的子菜单按钮类型
40025 不合法的子菜单按钮名字长度
40026 不合法的子菜单按钮KEY长度
40027 不合法的子菜单按钮URL长度
40028 不合法的自定义菜单使用用户
40029 不合法的oauth_code
40030 不合法的refresh_token
40031 不合法的openid列表
40032 不合法的openid列表长度
40033 不合法的请求字符,不能包含\uxxxx格式的字符
40035 不合法的参数
40038 不合法的请求格式
40039 不合法的URL长度
40050 不合法的分组id
40051 分组名字不合法
40060 删除单篇图文时,指定的 article_idx 不合法
40117 分组名字不合法
40118 media_id大小不合法
40119 button类型错误
40120 button类型错误
40121 不合法的media_id类型
40132 微信号不合法
40137 不支持的图片格式
40155 请勿添加其他公众号的主页链接
41001 缺少access_token参数
41002 缺少appid参数
41003 缺少refresh_token参数
41004 缺少secret参数
41005 缺少多媒体文件数据
41006 缺少media_id参数
41007 缺少子菜单数据
41008 缺少oauth code
41009 缺少openid
42001 access_token超时,请检查access_token的有效期,请参考基础支持-获取access_token中,对access_token的详细机制说明
42002 refresh_token超时
42003 oauth_code超时
42007 用户修改微信密码,accesstoken和refreshtoken失效,需要重新授权
43001 需要GET请求
43002 需要POST请求
43003 需要HTTPS请求
43004 需要接收者关注
43005 需要好友关系
43019 需要将接收者从黑名单中移除
44001 多媒体文件为空
44002 POST的数据包为空
44003 图文消息内容为空
44004 文本消息内容为空
45001 多媒体文件大小超过限制
45002 消息内容超过限制
45003 标题字段超过限制
45004 描述字段超过限制
45005 链接字段超过限制
45006 图片链接字段超过限制
45007 语音播放时间超过限制
45008 图文消息超过限制
45009 接口调用超过限制
45010 创建菜单个数超过限制
45011 API调用太频繁,请稍候再试
45015 回复时间超过限制
45016 系统分组,不允许修改
45017 分组名字过长
45018 分组数量超过上限
45047 客服接口下行条数超过上限
46001 不存在媒体数据
46002 不存在的菜单版本
46003 不存在的菜单数据
46004 不存在的用户
47001 解析JSON/XML内容错误
48001 api功能未授权,请确认公众号已获得该接口,可以在公众平台官网-开发者中心页中查看接口权限
48002 粉丝拒收消息(粉丝在公众号选项中,关闭了“接收消息”)
48004 api接口被封禁,请登录mp.weixin.qq.com查看详情
48005 api禁止删除被自动回复和自定义菜单引用的素材
48006 api禁止清零调用次数,因为清零次数达到上限
50001 用户未授权该api
50002 用户受限,可能是违规后接口被封禁
61451 参数错误(invalid parameter)
61452 无效客服账号(invalid kf_account)
61453 客服帐号已存在(kf_account exsited)
61454 客服帐号名长度超过限制(仅允许10个英文字符,不包括@及@后的公众号的微信号)(invalid   kf_acount length)
61455 客服帐号名包含非法字符(仅允许英文+数字)(illegal character in     kf_account)
61456 客服帐号个数超过限制(10个客服账号)(kf_account count exceeded)
61457 无效头像文件类型(invalid   file type)
61450 系统错误(system error)
61500 日期格式错误
65301 不存在此menuid对应的个性化菜单
65302 没有相应的用户
65303 没有默认菜单,不能创建个性化菜单
65304 MatchRule信息为空
65305 个性化菜单数量受限
65306 不支持个性化菜单的帐号
65307 个性化菜单信息为空
65308 包含没有响应类型的button
65309 个性化菜单开关处于关闭状态
65310 填写了省份或城市信息,国家信息不能为空
65311 填写了城市信息,省份信息不能为空
65312 不合法的国家信息
65313 不合法的省份信息
65314 不合法的城市信息
65316 该公众号的菜单设置了过多的域名外跳(最多跳转到3个域名的链接)
65317 不合法的URL
9001001 POST数据参数不合法
9001002 远端服务不可用
9001003 Ticket不合法
9001004 获取摇周边用户信息失败
9001005 获取商户信息失败
9001006 获取OpenID失败
9001007 上传文件缺失
9001008 上传素材的文件类型不合法
9001009 上传素材的文件尺寸不合法
9001010 上传失败
9001020 帐号不合法
9001021 已有设备激活率低于50%,不能新增设备
9001022 设备申请数不合法,必须为大于0的数字
9001023 已存在审核中的设备ID申请
9001024 一次查询设备ID数量不能超过50
9001025 设备ID不合法
9001026 页面ID不合法
9001027 页面参数不合法
9001028 一次删除页面ID数量不能超过10
9001029 页面已应用在设备中,请先解除应用关系再删除
9001030 一次查询页面ID数量不能超过50
9001031 时间区间不合法
9001032 保存设备与页面的绑定关系参数错误
9001033 门店ID不合法
9001034 设备备注信息过长
9001035 设备申请参数不合法
9001036 查询起始值begin不合法

 


8. 联系我们

 咨询电话:0755 – 3635 7758     

 开发费用:欢迎来电洽谈,价格合理

 上线时间: 2~3天

 现成代码,可到现场讲解现场调试,解除您的后顾之忧。

 

微信支付开发文档: https://www.cloudagiles.com/weixinzhifu-wechat-pay-api/

微信扫码登录网页开发文档: https://www.cloudagiles.com/weixin-scan-qr-code-login-website/

微信移动客服系统开发文档: https://www.cloudagiles.com/weixin-gongzhonghao-mobile-customer-service-system/

 

关键词: , , , , , , , , , , , , , , , , , , , ,