最近公司涉及到微信绑定用户,做了高级接口-申请带参数的二维码,总结了下微信开发接口。微信接口开发都是除了消息用的xml 回复基本上都是用json的形式传递信息(post/get),开发的方法基本都是一样的,以下以高级接口获取带参数的二维码为例,怎么做微信接口开发。

第一步:获取access_token,access_token是获取其他接口信息的钥匙,所有接口都需要调用access_token

     /// <summary>
/// 拉取AccessToken,微信每天公共2000次AccessToken的获取,所以需要缓存AccessToken
/// </summary>
/// <returns>用户凭证:AccessToken</returns>
public string getTokenSession(string appid,string appsecret)
{
string TokenSession;
if (Session[AccessToken] != null)
{
TokenSession = Session[AccessToken].ToString();
}
else
{
TokenSession = addTokenSession(appid, appsecret);
}
return TokenSession;
} /// <summary>
/// 将AccessToken添加到缓存
/// </summary>
/// <returns>AccessToken</returns>
public string addTokenSession(string appid, string appsecret)
{
//获取AccessToken
string AccessToken = GetAccessToken(appid,appsecret);
HttpContext.Current.Session[AccessToken] = AccessToken;
HttpContext.Current.Session.Timeout = ;
return AccessToken;
} /// <summary>
/// 获取AccessToken
/// </summary>
/// <returns>AccessToken</returns>
public string GetAccessToken(string appid, string appsecret)
{
string accessToken = "";
string respText = "";
string url = string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", appid, appsecret); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); using (Stream resStream = response.GetResponseStream())
{
StreamReader reader = new StreamReader(resStream, Encoding.Default);
respText = reader.ReadToEnd();
resStream.Close();
}
Dictionary<string, object> respDic = (Dictionary<string, object>)Jss.DeserializeObject(respText);
accessToken = respDic["access_token"].ToString();
return accessToken;
}

第二步:利用access_token来获取带参数的二维码

     /// <summary>
/// 调用微信接口获取带参数临时二维码的ticket
/// 使用方法:https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=TICKET
/// </summary>
/// <param name="scene_id">二维码带的参数</param>
/// <returns>json:ticket:换取二维码的凭证,expire_seconds:凭证有效时间,url:二维码解析后的地址。此处返回ticket 否则返回错误码</returns>
public string GetQrcode(string appid, string appsecret, Int32 scene_id)
{
string QrcodeUrl = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token={0}";//WxQrcodeAPI接口
string AccessToken = getTokenSession(appid, appsecret);//拉取AccessToken
QrcodeUrl = string.Format(QrcodeUrl, AccessToken);
string PostJson = "{\"expire_seconds\": 1800, \"action_name\": \"QR_SCENE\", \"action_info\": {\"scene\": {\"scene_id\": " + scene_id + "}}}";
string ReText = WebRequestPostOrGet(QrcodeUrl, PostJson);//post提交
Dictionary<string, object> reDic = (Dictionary<string, object>)Jss.DeserializeObject(ReText);
if (reDic.ContainsKey("ticket"))
{
return reDic["ticket"].ToString();//成功
}
else
{
return reDic["errcode"].ToString();//返回错误码
}
} /// <summary>
/// 调用微信接口获取带参数永久二维码的ticket
/// 使用方法:https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=TICKET
/// </summary>
/// <param name="scene_id">二维码带的参数</param>
/// <returns>json:ticket:换取二维码的凭证,expire_seconds:凭证有效时间,url:二维码解析后的地址。此处返回ticket 否则返回错误码</returns>
public string GetQrcode(string appid, string appsecret, string scene_str)
{
string QrcodeUrl = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token={0}";//WxQrcodeAPI接口
string AccessToken = getTokenSession(appid, appsecret);//拉取AccessToken
QrcodeUrl = string.Format(QrcodeUrl, AccessToken);
string PostJson = "{\"expire_seconds\": 1800, \"action_name\": \"QR_LIMIT_STR_SCENE\", \"action_info\": {\"scene\": {\"scene_str\": " + scene_str + "}}}";
string ReText = WebRequestPostOrGet(QrcodeUrl, PostJson);//此处省略了 WebRequestPostOrGet即为WebHttpRequest发送Post请求
Dictionary<string, object> reDic = (Dictionary<string, object>)Jss.DeserializeObject(ReText);
if (reDic.ContainsKey("ticket"))
{
return reDic["ticket"].ToString();//成功
}
else
{
return reDic["errcode"].ToString();//返回错误码
}
}

第三步:将获取的ticket用https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=TICKET使用就完成了。

微信开发者文档:http://mp.weixin.qq.com/wiki/18/28fc21e7ed87bec960651f0ce873ef8a.html

本文版权归作者(谢俊)和博客园所有,欢迎转载,转载请标明出处。

原文地址:http://www.cnblogs.com/net-xiejun/

微信开发群

完整源码下载:https://github.com/xiejun-net/weixin

个人公众账号:

C#微信公众号接口开发实例-高级接口-申请带参数的二维码的更多相关文章

  1. 微信开发之——Php批量生成带参数的二维码

    带参数的二维码对于渠道营销推广来说是很有用的,可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送,可喜的是微信开通了这个接口,那下面就来研究一下吧. 具体接口说明请参见,微信公众平 ...

  2. 微信公众号生成带参数的二维码asp源码下载

    晚上闲着没事,一个朋友联系,让帮忙写一个微信公众号利用asp生成带参数的二维码,别人扫了后如果已经关注过该公众号的,则直接进入公众号里,如果没关注则提示关注,关注后自动把该微信用户资料获取到并且保存入 ...

  3. Force.com微信开发系列(八)生成带参数的二维码

    为了满足用户渠道推广分析的需要,公众平台提供了生成带二维码的接口.使用该接口可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送.目前有两种类型的二维码,分别是临时二维码和永久二维码 ...

  4. 微信公共服务平台开发(.Net 的实现)9-------处理二维码

    今天我们来共同学习一下微信公共服务平台中一个重要内容---二维码扫描.众所周知二维码目前应用范围很广,在这里不再叙述背景了,但是值得一提的是目前大家手机上面应用的二维码扫描工具是支持的都是QR码和PD ...

  5. 微信小程序生成带参数的二维码 小程序二维码

    我是用php写的 先按照要求生成accesstoken $tokenUrl="https://api.weixin.qq.com/cgi-bin/token?grant_type=clien ...

  6. 微信小程序生成带参数的二维码(小程序码)独家asp.net的服务端c#完整代码

    一)我先用的小程序端的wx.request去调用API,发现竟然是一个坑! wx.request({ url: 'https://api.weixin.qq.com/wxa/getwxacodeunl ...

  7. 微信公众号支付开发全过程 --JAVA

    按照惯例,开头总得写点感想 ------------------------------------------------------------------ 业务流程 这个微信官网说的还是很详细的 ...

  8. 到处是坑的微信公众号支付开发(java)

    之前公司项目开发中支付是用阿里的支付做的,那叫一个简单,随意:悲催的是,现在公司开发了微信公众号,所以我步入了全是坑的微信支付开发中... ------------------------------ ...

  9. 你所误解的微信公众号开发、以及微信公众号网页授权、接收url跳转参数等问题

    前言:有一星期没跟新博客了,最近太忙.项目赶进度就没把时间花在博客上:今天来说说所谓的微信公众号开发和填坑记录: 微信公众号:运行在微信终端的应用 (对于开发者来说比较爽的你只需考虑兼容微信浏览器,因 ...

随机推荐

  1. <<卸甲笔记>>-基础语法对比

    以Oracle中sottt用户下的数据为例,PPAS 中scott用户下面的数据由Oracle迁移而来 1 查询emp表中的数据 Oracle [root@test03 ~]# su -  oracl ...

  2. SQL*Plus命令行工具连接Oracle数据库

    1.在命令行中输入"sqlplus /nolog"即可启动该工具. 2.连接到Oracle服务器  conn 用户名/密码@服务器连接字符串 as 连接身份 客户端工具根据&quo ...

  3. LINUX 自动备份脚本文件

    首先我在/root/backup 目录下建立一个文件夹, #mkdir /root/backup/mysqlbackup 以后在每天五点钟,就会有一个文件保存在这里. 接着新建文件 #vim /roo ...

  4. python windows安装

    一.下载并安装 下载地址http://www.python.org/download/ 安装 二.配置环境变量 配置python环境变量以便后面安装插件.D:\Program Files\Python ...

  5. Linux下的PostgreSQL简单安装手册

    1. 安装环境     linux版本: CentOS release 6.2 (Final)     pg版本    : postgresql-9.5.0   2. pg数据库下载地址 --http ...

  6. mysql查询优化器为什么可能会选择错误的执行计划

    有可能导致mysql优化器选择错误的执行计划的原因如下: A:统计信息不准确,mysql依赖存储引擎为其提供的统计信息来评估成本,然而有的存储引擎提供的信息是准确的,有的引擎提供的可能就偏差很大,如: ...

  7. StringBuilder和StringBuffer区别

    一.StringBuilder 一个可变的字符序列.此类提供了一个与StringBuffer兼容的API,但不保证同步.该类被设计用作StringBuffer的一个简易替换,用在字符串缓冲区被单个线程 ...

  8. (原创) cocos2dx使用Curl连接网络(客户端)

    0. 环境: winxpsp3, vs2010, cocos2dx@2.1.4 1. 新建一个Helloworld工程 2. HelloworldScene.h里面重写virtual bool ccT ...

  9. 关于bootstrap

    http://www.runoob.com/bootstrap/bootstrap-buttons.html file:///C:/LiuHuan/bc-bootstrap/bc-bootstrap/ ...

  10. 2016 ACM/ICPC Asia Regional Dalian Online

    1009 Sparse Graph(hdu5876) 由于每条边的权值都为1,所以最短路bfs就够了,只是要求转置图的最短路,所以得用两个set来维护,一个用来存储上次扩散还没访问的点,一个用来存储这 ...