`
zzc1684
  • 浏览: 1189919 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

微信开放平台:朋友圈API参考文档

阅读更多

用户授权

客户端的授权流程

针对没有后台服务器的 App 类型,如移动平台的 App 应用,微信使用 OAuth2.0 的 Implicit Grant 方式授权,流程如下:

  1. 用户访问第三方应用,使用到分享至微信朋友圈的功能,应用检测到没有用户的授权信息,于是将用户引导至授权页面;
  2. 当用户未登录时,将要求先登录,否则继续下一步;
  3. 授权页面为一个对话框,显示应用信息以及请求的访问权限,并提示用户选择允许或拒绝;
  4. 对话框将重定向回应用,若授权成功则带上 Access Token,否则带上相应的错误码。

客户端授权流程得到的 Access Token 有效期为 2 小时,过期后需重新走授权流程。

服务器端的授权流程

服务端的授权流程为 OAuth2.0 定义的 Authentication Code Grant 的授权方式,我们推荐朋友圈应用使用服务端的授权流程。在该授权流程中,App 除了可以得到用户的 AccessToken 外还有 RefreshToken, RefreshToken 过期时间为一年。

服务端的授权流程如下:

  1. 当用户未登录时,将要求先登录,否则继续下一步;
  2. 授权页面为一个对话框,显示应用信息以及请求的访问权限,并提示用户选择允许或拒绝;
  3. 当用户允许后,微信将以重定向的方式回到App,并带上一个授权码,否则将提示失败;
  4. 第三方应用通过后台访问微信 API,通过授权码换取Access Token和Refresh Token。

通过服务端的授权流程得到的 AccessToken 有效期为 30 天,过期后使用 RefreshToken 即可换取新的 AccessToken。

授权连接

URL: https://open.weixin.qq.com/oauth

参数列表 参数含义
appid 从微信开放平台申请的AppId
response_type 返回类型,值为code或token之一
redirect_uri 授权成功后的重定向页面,默认为App预留在微信的uri
scope 可选参数,所申请授权的资源域,以空格分开,目前仅支持并默认选择post_timeline
state 可选参数,自定义重定向uri的参数

服务端流程请求连接样例:
https://open.weixin.qq.com/oauth?appid=hello&response_type=code

用户成功授权后返回样例:
HTTP/1.1 302 Found
Location: https://client.example.com/cb?code=SplxlOBeZQQYbYS6WxSbIA

用户拒绝授权的返回样例:
HTTP/1.1 302 Found
Location: https://client.example.com/cb?error=access_denied

客户端流程请求连接样例:
https://open.weixin.qq.com/oauth?appid=hello&response_type=token

用户成功授权后返回样例:
HTTP/1.1 302 Found
Location: https://client.example.com/cb#access_token=ASDFBCDEFGHIJKLMN&expires_in=259200

用户拒绝授权的返回样例:
HTTP/1.1 302 Found
Location: https://client.example.com/cb#error=access_denied

API列表

名称 功能
GET /token 获取Access Token
POST /media 上传附件
GET /media/:media_id 下载附件内容
POST /timeline 发表到朋友圈

GET /token

URL: https://api.weixin.qq.com/token.format

用于通过授权code换取access token和refresh token,或用于通过refresh token换取新的access token。

参数列表 参数含义
grant_type 获取的token类型,authentication_code 或 refresh_token
code 当grant_type为authentication_code时填写,此为用户授权后得到的授权码
refresh_token 当grant_type为refresh_token时填写
redirect_uri 当grant_type为authentication_code时填写,需和oauth步骤所填写的redirect_uri相同

当应用走服务器端的授权流程时,通过该API使用授权码换取access token和refresh token,此时grant_type需设置为authentication_code,请求URL如下:

GET "https://api.weixin.qq.com/token?appid=wx1234hello" "&grant_type=authorization_code&code=4433222&redirect_Uri=" "http%3A//www.example.com/weixin_redirect"

返回样例:

{
    "refresh_token" : "93Zkx2gyQVaeIbS1CTDFSZilrVyj1Q1Ts2UeArlEnbrP6bKDyWAz4WlIHu_
               wwasdfLNNLfmn023mNA0nX",
    "access_token"  : "3Zkx2gyQVaeIbS1CTDFSZilrVyj1Q1Ts2UeArlEnbrP6bKDyWAz4WlIHu_Lj
               JqUNdYDYlyxrGOw1ywdb4sAyahgskuUBvSSx6EO2oxowQmcwdC3YTDkSJPTF
               6yoKpfZkY2mIGBeaMZKsXcfWoTP94g",
    "expires_in"    : 7200
}

当access token过期时,可通过refresh token获取新的access token,请求样例:

GET "https://api.weixin.qq.com/token?appid=wx1234abcd" "&grant_type=refresh_token&secret=egs1mwxkfpt459" "&refresh_token=93Zkx2gyQVaeIbS1CTDFSZilrVyj1Q1Ts2UeArlEnbrP6bKDyWAz4WlIHu_wwasdfLNNLfmn023mNA0nX"

返回样例:

{
    "access_token" : "K3Zkx2gyQVaeIbinDDmZ1CTDFSZilrVyj1Q1Ts2UeArlEnbrP6bKDyWAz4WlIHu_
                      LjJqUNdYDYlyxrGOw1ywdGGb4sAyahgskuUBvSSx6EO2oxowQmcwdC3YTDkSJPTF
                      6yoKpfZkY2mIGBeaMZKs",
    "expires_in"   : 7200
}

POST /media

URL: https://api.weixin.qq.com/media.format

参数列表 参数含义
type 附件类型,目前仅支持image
media[] 附件内容

该API用于上传一个附件到微信服务器,成功后将得到一个媒体id(media_id)表示该附件,从而分享至用户朋友圈。
上传的图片大小限制为2M,如果原图宽度超过640px,微信服务器将对图片进行等比例缩放后存储。

请求样例(使用curl工具):

curl -F "media=@test.jpg" "https://api.weixin.qq.com/media?type=image&access_token=3Zkx2gyQVaeIbS1CTDFSZilrVyj1Q1Ts2UeArlEnbrP6bKDyWAz4WlIHu_LjJqUNdYDYlyxrGOw1ywdb4sAyahgskuUBvSSx6EO2oxowQmcwdC3YTDkSJPTF6yoKpfZkY2mIGBeaMZKsXcfWoTP94g"

返回样例:

{
    "media_id"   : "fPPPmh9EBsgdrqaSJvl6nPvchUfbDxN8lmGTMBN2BWABP_usGso5Qx7raSraaXAT",
    "type"       : "image",
    "created_at" : 1335415865
}

GET /media/:media_id

URL: https://api.weixin.qq.com/media/:media_id.format

参数列表 参数含义
media_id 附件id

该API用于下载媒体附件。

请求样例(使用curl工具):

curl "https://api.weixin.qq.com/media/fPPPmh9EBsgdrqaSJvl6nPvchUfbDxN8lmGTMBN2BWABP_usGso5Qx7raSraaXAT?access_token=3Zkx2gyQVaeIbS1CTDFSZilrVyj1Q1Ts2UeArlEnbrP6bKDyWAz4WlIHu_LjJqUNdYDYlyxrGOw1ywdb4sAyahgskuUBvSSx6EO2oxowQmcwdC3YTDkSJPTF6yoKpfZkY2mIGBeaMZKsXcfWoTP94g"

POST /timeline

URL: https://api.weixin.qq.com/timeline.format

参数列表 参数含义
content_type 指定消息的类型,必填,目前支持五类:text、photo、feed、video和music。
title 一句话描述,当content_type是feed时为必填字段。
对于content_type为feed,该字段可以是文章标题;
对于content_type为music,该字段可以是歌曲名和歌手;
对于content_type为video,该字段可以是视频的名称。
media_list media_id列表,content_type为feed、music和video时必填。多个media_id以“,”分隔。
当content_type为photo,最多可以提供9个media_id,多出部分会被抛弃。
当content_type为feed、music和video时,只可提供1个media_id作为消息的缩略图,多出部分会被抛弃。
media_url 音乐文件地址,当content_type为music时必填。协议支持http和https,格式支持mp3和wav。
content_url 内容链接,当content_type为feed、music和video时必填
coordinates 经纬度,用“,”分隔,可选。数据格式为(latitude,longitude)

该API用于分享内容至用户的朋友圈中,title或media_list两个参数至少选择其中之一。

请求示例 1(使用curl工具):

curl -d "title=hello&coordinates=10.00,10.00&media_list=fPPPmh9EBsgdrqaSJvl6nPvchUfbDxN8lmGTMBN2BWABP_usGso5Qx7raSraaXAT,fPPPmh9EBsgdrqaSJvl6nPvchUfbDxN8lmGTMBN2BWABP_usGso5Qx7raSraaXAT"
"https://api.weixin.qq.com/timeline?access_token=3Zkx2gyQVaeIbS1CTDFSZilrVyj1Q1Ts2UeArlEnbrP6bKDyWAz4WlIHu_LjJqUNdYDYlyxrGOw1ywdb4sAyahgskuUBvSSx6EO2oxowQmcwdC3YTDkSJPTF6yoKpfZkY2mIGBeaMZKsXcfWoTP94g"

成功返回:

{
    "id"         : 11232109051049549826,
    "created_at" : 1333007682
}

失败返回:

{
    "time"         : 1338972300,
    "error" : { "msg": "content_url is missing", "code": 40329 }
}

请求示例 2:

curl -d "title=Complcated&coordinates=24.00,114.00&media_list=L5JPCzX96wnwcE4Hthh&content_url=http%3A%2F%2Fy.qq.com%2Fi%2Fsong.html%23p%3D7B2273&media_url=http%3A%2F%2Fy.qq.com%2Fi%2Fsong.html%23p%3D7B2273&content_type=music"
"https://api.weixin.qq.com/timeline?access_token=3Zkx2gyQVaeIbS1CTDFSZilrVyj1Q1Ts2UeArlEnbrP6bKDyWAz4WlIHu_LjJqUNdYDYlyxrGOw1ywdb4sAyahgskuUBvSSx6EO2oxowQmcwdC3YTDkSJPTF6yoKpfZkY2mIGBeaMZKsXcfWoTP94g"

请求示例2在微信朋友圈展示的效果图如下::

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics