如何调用微信小程序调用接口获取openid的接口文档

← 微信获取聊天记录获取聊天记录此接口返回的聊天记录中,对于图片、语音、视频,分别展示成文本格式的[image]、[voice]、[video]。对于较可能包含重要信息的图片消息,后续将提供图片拉取URL,近期将上线。调用说明参数说明starttime起始时间,unix时间戳endtime结束时间,unix时间戳,每次查询时段不能超过24小时msgid消息id顺序从小到大,从1开始number每次获取条数,最多10000条返回说明参数说明worker完整客服帐号,格式为:帐号前缀@公众号微信号openid用户标识opercode操作码,2002(客服发送信息),2003(客服接收消息)text聊天记录time操作时间,unix时间戳返回码说明65400API不可用,即没有开通或升级到新版客服功能65416查询参数不合法65417查询时间段超出限制调用示例第一次
https://api./customservice/msgrecord/getmsglist
?access_token=ACCESS_TOKEN
POST数据示例如下:
&starttime&&:&,
&endtime&&:&,
&msgid&&:&1,
&number&&:&10000
&recordlist&
&&&&&&&&&&
&oDF3iY9WMaswOPWjCIp_f3Bnpljk&
&&&&&&&&&&
&opercode&
&&&&&&&&&&
&&您好,客服test1为您服务。&
&&&&&&&&&&
&&&&&&&&&&
&test1@test&
&&&&&&&&&&
&oDF3iY9WMaswOPWjCIp_f3Bnpljk&
&&&&&&&&&&
&opercode&
&&&&&&&&&&
&你好,有什么事情?&
&&&&&&&&&&
&&&&&&&&&&
&test1@test&
&&&&&&&&&......
&&&&&&number&:10000,
&&&&&&msgid&:
请求的number(10000)和返回的number(10000)一样,该时间段可能还有聊天记录未获取,将msgid()填进下次请求中;
https://api./customservice/msgrecord/getmsglist
?access_token=ACCESS_TOKEN
POST数据示例如下:
&starttime&&:&,
&endtime&&:&,
&msgid&&:&,
&number&&:&10000
&recordlist&
&&&&&&&&&&
&oDF3iY9WMaswOPWjCIp_f3Bnpljk&
&&&&&&&&&&
&opercode&
&&&&&&&&&&
&&您好,客服test1为您服务。&
&&&&&&&&&&
&&&&&&&&&&
&test1@test&
&&&&&&&&&&
&oDF3iY9WMaswOPWjCIp_f3Bnpljk&
&&&&&&&&&&
&opercode&
&&&&&&&&&&
&你好,有什么事情?&
&&&&&&&&&&
&&&&&&&&&&
&test1@test&
&&&&&&&&&......
&&&&&&number&:4,
&&&&&&msgid&:
请求的number(10000)和返回的number(4)不一样,则该时间段的后续聊天记录获取完毕;← 扫一扫,关注公众号分类导航微信关注浏览(4623)
微信小程序要怎样获取微信OpenId?
获取微信OpenId
先获取code
再通过code获取authtoken,从authtoken中取出openid给前台
微信端一定不要忘记设定网页账号中的授权回调页面域名
流程图如下
页面js代码
/* 写cookie */
function setCookie(name, value) {
var Days = 30;
var exp = new Date();
exp.setTime(exp.getTime() + Days * 24 * 60 * 60 * 1000);
document.cookie = name + &=& + escape(value) + &;expires=& + exp.toGMTString() + &;path=/&;
/* 读cookie */
function getCookie(name) {
var arr = document.cookie.match(new RegExp(&(^| )& + name + &=([^;]*)(;|$)&));
if (arr != null) {
return unescape(arr[2]);
/* 获取URL参数 */
function getUrlParams(name) {
var reg = new RegExp(&(^|&)& + name + &=([^&]*)(&|$)&, &i&);
var r = window.location.search.substr(1).match(reg);
if (r != null) {
return unescape(r[2]);
/* 获取openid */
function getOpenId(url) {
var openid = getCookie(&usropenid&);
if (openid == null) {
openid = getUrlParams('openid');
alert(&openid=&+openid);
if (openid == null) {
window.location.href = &wxcode?url=& +
setCookie(&usropenid&, openid);
WxCodeServlet代码
//访问微信获取code
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String state = req.getParameter(&url&);
//WxOpenIdServlet的地址
String redirect =&http://&+Configure.SITE+&/wxopenid&;
redirect = URLEncoder.encode(redirect, &utf-8&);
StringBuffer url = new StringBuffer(&https://open./connect/oauth2/authorize?appid=&)
.append(Configure.APP_ID).append(&&redirect_uri=&).append(redirect)
.append(&&response_type=code&scope=snsapi_base&state=&).append(state).append(&#wechat_redirect&);
resp.sendRedirect(url.toString());
WxOpenIdServlet代码
//访问微信获取openid
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String code = req.getParameter(&code&);
String state = req.getParameter(&state&);
Result ret = new Result();
AuthToken token = WXUtil.getAuthToken(code);
if(null != token.getOpenid()){
ret.setCode(0);
(&====openid==&+token.getOpenid());
Map&String,String& map = new HashMap&String,String&();
map.put(&openid&, token.getOpenid());
map.put(&state&, state);
ret.setData(map);
ret.setCode(-1);
ret.setMsg(&登录错误&);
String redUrl = state+&?openid=&+token.getOpenid();
resp.sendRedirect(redUrl);
获取AuthToken(WXUtil.getAuthToken(code))代码
public static AuthToken getAuthToken(String code){
AuthToken vo =
String uri = &https://api./sns/oauth2/access_token?&;
StringBuffer url = new StringBuffer(uri);
url.append(&appid=&).append(Configure.APP_ID);
url.append(&&secret=&).append(Configure.APP_SECRET);
url.append(&&code=&).append(code);
url.append(&&grant_type=&).append(&authorization_code&);
HttpURLConnection conn = HttpClientUtil.CreatePostHttpConnection(url.toString());
InputStream input =
if (conn.getResponseCode() == 200) {
input = conn.getInputStream();
input = conn.getErrorStream();
vo = JSON.parseObject(new String(HttpClientUtil.readInputStream(input),&utf-8&),AuthToken.class);
} catch (Exception e) {
log.error(&getAuthToken error&, e);
HttpClientUtil类
package com.huatek.shebao.
import java.io.ByteArrayOutputS
import java.io.DataOutputS
import java.io.IOE
import java.io.InputS
import java.net.HttpURLC
import java.net.MalformedURLE
import java.net.ProtocolE
import java.net.URL;
public class HttpClientUtil {
// 设置body体
public static void setBodyParameter(String sb, HttpURLConnection conn)
throws IOException {
DataOutputStream out = new DataOutputStream(conn.getOutputStream());
out.writeBytes(sb);
out.flush();
out.close();
// 添加签名header
public static HttpURLConnection CreatePostHttpConnection(String uri) throws MalformedURLException,
IOException, ProtocolException {
URL url = new URL(uri);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setUseCaches(false);
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setRequestMethod(&POST&);
conn.setInstanceFollowRedirects(true);
conn.setConnectTimeout(30000);
conn.setReadTimeout(30000);
conn.setRequestProperty(&Content-Type&,&application/json&);
conn.setRequestProperty(&Accept-Charset&, &utf-8&);
conn.setRequestProperty(&contentType&, &utf-8&);
public static byte[] readInputStream(InputStream inStream) throws Exception {
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while ((len = inStream.read(buffer)) != -1) {
outStream.write(buffer, 0, len);
byte[] data = outStream.toByteArray();
outStream.close();
inStream.close();
封装AuthToken的VO类
package com.huatek.shebao.
public class AuthToken {
private String access_
private Long expires_
private String refresh_
public String getAccess_token() {
return access_
public void setAccess_token(String access_token) {
this.access_token = access_
public Long getExpires_in() {
return expires_
public void setExpires_in(Long expires_in) {
this.expires_in = expires_
public String getRefresh_token() {
return refresh_
public void setRefresh_token(String refresh_token) {
this.refresh_token = refresh_
public String getOpenid() {
public void setOpenid(String openid) {
this.openid =
public String getScope() {
public void setScope(String scope) {
this.scope =
public String getUnionid() {
public void setUnionid(String unionid) {
this.unionid =
public Long getErrcode() {
public void setErrcode(Long errcode) {
this.errcode =
public String getErrmsg() {
public void setErrmsg(String errmsg) {
this.errmsg =
更多关于微信小程序可以查看
千篇一律的复制粘贴,你们回答问题能不能过过脑子。
广告等垃圾信息
不友善内容
违反法律法规的内容
不宜公开讨论的政治内容
微信号:w3cschoolcn
意见反馈:
联系方式:Android:微信授权登录与微信分享全解析
在移动互联网浪潮中,联网APP已经把单机拍死在沙滩上,很多公司都希望自家应用能够有一套帐号,可是许多用户却并不一定买账:我凭啥注册你家应用的帐号?微博,微信,QQ几乎成了每个人手机中的必装应用,于是微信,微博,QQ说了:来来来,你们都可以用我家的帐号登录你家应用,只要你遵循OAuth2.0协议标准就行。于是第三方社交帐号登陆成为了许多新兴应用的选择,由于腾讯官方微信开放平台的在线文档相对最新的SDK有些出入,并且登录相关的文档结构次序有些紊乱,今天就把我的一些经验记录在此,对微信开放平台官方的在线文档进行一定的整理。同时微信分享可以扩大自身APP影响力,于是微信分享功能也是很多开发者需要的功能,一并整理在此,希望能对后来的同道朋友有所帮助。
授权流程说明
微信OAuth2.0授权登录让微信用户使用微信身份安全登录第三方应用或网站,在微信用户授权登录已接入微信OAuth2.0的第三方应用后,第三方可以获取到用户的接口调用凭证(access_token),通过access_token可以进行微信开放平台授权关系接口调用,从而可实现获取微信用户基本开放信息和帮助用户实现基础开放功能等。
微信OAuth2.0授权登录目前支持authorization_code模式,适用于拥有server端的应用授权。该模式整体流程为:
1. 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数;
2. 通过code参数加上AppID和AppSecret等,通过API换取access_token;
3. 通过access_token进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。
获取access_token时序图:
vcHLo6zWu8rH1NrP387EtbXDu9PQuPzQwrb40uyhozwvc3Ryb25nPjwvcD4NCjxwPs/Cw+a9q9LAtM69sr3izqLQxcrayKi1x8K8wfezzKGjy/nT0M34wufH68fzvvnOqkdFVMfrx/OhozwvcD4NCjxwcmUgY2xhc3M9"brush:">
1、获取临时票据code
2、获取access_token & openid
3、检查access_token是否有效
4、刷新或续期access_token
5、获取微信用户详细信息
获取临时票据code
前三条向右的箭头
// 发出授权申请
Final SendAuth.Req req = new SendAuth.Req();
req.scope = snsapi_
req.state = wechat_sdk_微信登录,分享demo_
api.sendReq(req);
上两条箭头向左的流程在代码体现出来的就是:
public void onResp(BaseResp resp) ;// 这个回调接口位于IWXAPIEventHandler中
返回的数据为resp,用作请求登录授权时,它是SendAuth.Resp的实例,携带的数据有:
ErrorCode:ERR_OK = 0(用户同意);ERR_AUTH_DENIED = -4(用户拒绝授权);ERR_USER_CANCEL = -2(用户取消)
code:用户换取access_token的code,仅在ErrCode为0时有效
state:第三方程序发送时用来标识其请求的唯一性的标志,由第三方程序调用sendReq时传入,由微信终端回传,state字符串长度不能超过1K
lang:微信客户端当前语言
country:微信客户端当前国家
以上数据均以static String形式存在SendAuth.Resp的resp对象中。
注意:当使用微信提供最新的SDK/library时,上面有些数据是不存在,微信开放平台的文档和API及SDK没有同步更新。读者可使用最下方微信登录,分享demo中的笔者使用的jar包构建工程。
获取access_token & openid
最后一条向右的箭头表示:使用得到的code,获取access_token,openid,接口为:
https://api./sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
注意:微信的接口链接是使用SSL的安全链接,普通的HttpClient访问会导致应用崩溃或报错,详细方法请下载最下方的微信登录,分享demo代码,或者点击下方链接直接搜索
谷歌搜索: 访问Https链接
百度搜索:Android 访问Https链接
应用唯一标识,在微信开放平台提交应用审核通过后获得
secret:应用密钥AppSecret,在微信开放平台提交应用审核通过后获得
:填写第一步获取的code参数
grant_type:固定值,填authorization_code
最下方向左的箭头表示使用code访问完链接返回的数据,json携带的数据有:
access_token:接口调用凭证
expires_in:access_token的有效期,一般为7200(秒),也即是两小时
refresh_token:用户刷新access_token
openid:授权用户唯一标识
scope:用户授权的作用域,使用逗号(,)分隔
检查access_token是否有效
由于access_token有效期为两小时,所以进行下一步操作前最好进行一次检查,接口为:
https://api./sns/auth?access_token=ACCESS_TOKEN&openid=OPENID
传入的参数为accesss_token和openid。
access_token有效时返回的json是:
errcode:0,errmsg:ok
失效时的返回数据为:
errcode:40003,errmsg:invalid openid
如果access_token有效,则跳过下一步,失效时需要刷新或续期access_token。
刷新或续期access_token
access_token是调用授权关系接口的调用凭证,由于access_token有效期(目前为2个小时)较短,当access_token超时后,可以使用refresh_token进行刷新,access_token刷新结果有两种:
1.若access_token已超时,那么进行refresh_token会获取一个新的access_token,新的超时时间;
2.若access_token未超时,那么进行refresh_token不会改变access_token,但超时时间会刷新,相当于续期access_token。
refresh_token拥有较长的有效期(30天),当refresh_token失效的后,需要用户重新授权。
刷新accessToken接口为:
https://api./sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN
参数说明:
appid:应用唯一标识
grant_type:固定值,填refresh_token
refresh_token:填写前面获取到的refresh_token的值
返回的json数据有:
access_token:接口调用凭证
expires_in:access_token接口调用凭证超时时间,单位(秒)
refresh_token:用户刷新access_token
openid:授权用户唯一标识
scope:用户授权的作用域,使用逗号(,)分隔
获取微信用户详细信息
获取access_token,openid后,就可以用来获取更多用户信息,比如微信昵称,头像,性别等。接口为:
https://api./sns/auth?access_token=ACCESS_TOKEN&openid=OPENID
可获取的json携带的数据有:
openid:普通用户的标识,对当前开发者帐号唯一
nickname:普通用户昵称
sex:普通用户性别,1为男性,2为女性
province:普通用户个人资料填写的省份
city:普通用户个人资料填写的城市
country:国家,如中国为CN
headimgurl:用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空
privilege:用户特权信息,json数组,如微信沃卡用户为(chinaunicom)
unionid:用户统一标识。针对一个微信开放平台帐号下的应用,同一用户的unionid是唯一的。
微信登录的流程结束了, 至于开发者需要将那些用户信息上传到自家的app服务器就取决于开发者了。
1、微信分享分为微信好友分享,朋友圈分享,当然,还有收藏也是共用分享的接口,无需授权登录即可调用分享接口。
2、由于好友分享,朋友圈分享和收藏只是一个参数的区别,所以下面只讲好友分享,具体的可以下载最下方的微信登录,分享demo进行查看。
3、微信可以分享的内容包括,纯文字,图片,链接,音乐,视频,app,emoji表情等。
微信分享流程
1、在你的工程里面新建一个wxapi包,并且新建一个WXEntryActivity,继承Activity,或其他Activity(这两步是必须的,微信开发文档中有提到),详见:
https://open./cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=&token=&lang=zh_CN
2、并在manifest文件里面加上exported属性,设置为true。
3、实现一个IWXAPIEventHandler接口。
微信发送的请求将回调到onReq方法,发送到微信请求的响应结果将回调到onResp方法
在WXEntryActivity中将接收到的intent及实现了IWXAPIEventHandler接口的对象传递给IWXAPI接口的handleIntent方法,示例如下图:
当微信发送请求到你的应用,将通过IWXAPIEventHandler接口的onReq方法进行回调,类似的,应用请求微信的响应结果将通过onResp回调。
如果需要混淆代码,为了保证sdk的正常使用,需要在proguard.cfg加上下面两行配置:
-keep class com.tencent.mm.sdk.** {
微信分享详细代码流程是:
IWXAPI api = WXAPIFactory.createWXAPI(this, APP_ID, false);// 传入申请到的appid,得到一个IWXAPI的实例
api.registerApp(APP_ID);// 将app注册到微信列表,我不知道这是什么意思,有知道的请告诉我,谢谢!
// 开始分享纯文本到给好友
WXTextObject textObj = new WXTextObject();
textObj.text =
// 用WXTextObject对象初始化一个WXMediaMessage对象
WXMediaMessage msg = new WXMediaMessage();
msg.mediaObject = textO
// 发送文本类型的消息时,title字段不起作用
// msg.title = W
msg.title = 分享文字标题;
msg.description =
// 构造一个Req
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildTransaction(text); // transaction字段用于唯一标识一个请求
req.message =
req.scene = SendMessageToWX.Req.WXSceneT// 表示发送场景为朋友圈,这个代表分享到朋友圈
// req.scene = SendMessageToWX.Req.WXSceneS//表示发送场景为好友对话,这个代表分享给好友
// req.scene = SendMessageToWX.Req.WXSceneT// 表示发送场景为收藏,这个代表添加到微信收藏
// 调用api接口发送数据到微信
api.sendReq(req);
上面大致的表现了一个分享纯文本给好友的场景,如果需要分享到朋友圈,只需要更改req.scene字段值。
1、其中IWXAPI.registerAPP(APP_ID)是官方demo中的一行代码,表示的是将app注册到微信列表,我并不知道有什么用,所谓的微信列表出现在哪儿?该行代码删除后,仍然可以获取登录授权,实现分享等功能。有知道的请告诉我,谢谢!
2、目前笔者遇到无法分享在线图片WXImageObject的问题,分享在线图片时出现分享界面右上角&发送&按钮灰色,无法点击的情况,希望分享成功的朋友告诉我,谢谢!问题如下图
要分享链接,图片,音乐,视频等需要将WXTextObject 对象改成对应的obj对象。详细请下载文章下方的微信登录,分享demo。
由于微信官方demo中并未提供微信登录的代码示例,分享的代码很齐全,可是分享在线图片的代码在我这里却又问题,所以笔者将自己的一些经验和遇到的坑总结在这里,包括了微信第三方登录,微信分享的内容,希望对大家有所帮助。也希望笔者在文中提到的问题有热心人能够解答
//1、 注册到微信列表有什么用,微信列表在哪儿可以看到
IWXAPI.registerApp(APP_ID);
//2、 我为什么无法使用以下代码分享在线图片
WXImageObject imgObj = new WXImageObject();
imgObj.imageUrl = imgU// 在线图片链接
WXMediaMessage msg = new WXMediaMessage();
msg.mediaObject = imgO
Bitmap bmp = BitmapFactory.decodeStream(new URL(url).openStream());
Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp, THUMB_SIZE, THUMB_SIZE, true);
bmp.recycle();
msg.thumbData = Util.bmpToByteArray(thumbBmp, true);
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildTransaction(img);
req.message =
req.scene = isTimelineCb.isChecked() ? SendMessageToWX.Req.WXSceneTimeline : SendMessageToWX.Req.WXSceneS
api.sendReq(req);
最近有人向我反映生成的apk无法正常运行。在此进行解释:
demo源码生成的apk不可正常运行的原因是:在微信开放平台添加应用时,包名,应用签名,app_id是绑定的。你们签名的apk不起作用,demo代码仅供参考交流。拒绝访问 |
| 百度云加速
请打开cookies.
此网站 () 的管理员禁止了您的访问。原因是您的访问包含了非浏览器特征(3b8e9b5e9549438e-ua98).
重新安装浏览器,或使用别的浏览器

我要回帖

更多关于 微信接口调用 的文章

 

随机推荐