using Senparc.Weixin.Entities;
using Senparc.Weixin.HttpUtility;
using Senparc.Weixin.QY.AdvancedAPIs.OAuth2;
using Senparc.Weixin.QY.CommonAPIs;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls; namespace CRM.CIS.WeiXin
{
public partial class TwoVerification : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{ if (!IsPostBack)
{
string code = Request["code"];
string state = Request["state"]; if (!string.IsNullOrEmpty(code) && !string.IsNullOrEmpty(state))
{
string CorpId = Properties.Settings.Default.CorpId;
string Secret = Properties.Settings.Default.Secret;
//注册corpid
if (!AccessTokenContainer.CheckRegistered(CorpId))
{
AccessTokenContainer.Register(CorpId, Secret);
} string accessToken = AccessTokenContainer.GetToken(CorpId);
GetUserIdResult guir = Senparc.Weixin.QY.AdvancedAPIs.OAuth2.OAuth2Api.GetUserId(accessToken, code, 1);
if (guir.errcode == 0)
{
//读取职员状态
var member = Senparc.Weixin.QY.AdvancedAPIs.MailList.MailListApi.GetMember(accessToken, guir.UserId);
hfaccessToken.Value = accessToken;//使用HiddenField保存了信息
hfValue.Value = guir.UserId;//HiddenField 保存了uid
ObjectDataSource1.DataBind();
if (member.status == 1)
{
btnOK.Enabled = false;
btnOK.Text = "已关注";
}
else if (member.status == 2)
{
btnOK.Enabled = false;
btnOK.Text = "已冻结";
}
else
{
btnOK.Enabled = true;
btnOK.Text = "请关注";
} } }
#if DEBUG
else
{ hfValue.Value = "MysticBoy";
ObjectDataSource1.DataBind();
}
#endif
}
}
//这是从数据库里面查询要用ObjectDataSource1显示的内容的方法, 根据你的情况来写这段代码
public bas_Company GetCompanyInfo(string userid)
{
bas_Company result = null;
using (CISDBEntities ef = new CISDBEntities())
{
var ci = from c in ef.bas_Company where c.UserName == userid select c;
if (ci.Any())
{
result = ci.Single();
} }
return result;
}
protected void btnOK_Click(object sender, EventArgs e)
{
string userId = hfValue.Value;
string accessToken = hfaccessToken.Value;
var member = Senparc.Weixin.QY.AdvancedAPIs.MailList.MailListApi.GetMember(accessToken, userId);
//根据上次保留的accessToken userId 信息查询这个会员是不是已经被关注,尤其是在手机里面点了返回后!
if (member.status == 4)//是未关注
{
//https://github.com/JeffreySu/WeiXinMPSDK 里面的
// Senparc.Weixin.QY.AdvancedAPIs.Concern.ConcernApi.TwoVerification
 //截止2015年4月14日里面的参数没传对, 因此在这里使用自己的代码
var url = string.Format("https://qyapi.weixin.qq.com/cgi-bin/user/authsucc?access_token={0}&userid={1}", accessToken, userId);
var result = Get.GetJson<QyJsonResult>(url);
if (result.errcode == 0)
{
btnOK.Enabled = false;
btnOK.Text = "已经关注";
}
else
{
btnOK.Text = result.errmsg;
}
}
else if (member.status == 1)//已经关注了
{
btnOK.Enabled = false;
btnOK.Text = "已关注";
}
else if (member.status == 2)//被冻结了
{
btnOK.Enabled = false;
btnOK.Text = "已冻结";
}
}
}
}

  由于本职工作是Linux下使用C做嵌入式应用开发,关于微信等BS方面相形见拙,请看官不要见笑

微信二次认证 C#的更多相关文章

  1. php 人人商城 生成 临时微信二维码,并保存成海报图片 有效期一个月

    public function getPoster(){ global $_W; global $_GPC; $mm = pdo_fetch('select nickname,codetime fro ...

  2. 小猪cms微信二次开发之怎样分页

    $db=D('Classify'); $zid=$db->where(array('id'=>$this->_GET('fid'),'token'=>$this->tok ...

  3. HTTP协议 (二) 基本认证

    HTTP协议 (二) 基本认证 http协议是无状态的, 浏览器和web服务器之间可以通过cookie来身份识别. 桌面应用程序(比如新浪桌面客户端, skydrive客户端)跟Web服务器之间是如何 ...

  4. HTML5 微信二维码提示框

    这是一个js的小案例,主要效果是显示一个微信二维码的提示框,非常简单实用. 源码如下: JS部分 <script src="js/jquery-1.8.3.min.js"&g ...

  5. (5)微信二次开发 之 XML格式数据解析

    1.首先理解一下html html的全名是:HyperText Transfer markup language 超级文本标记语言,html本质上是一门标记(符合)语言,在html里,这些标记是事先定 ...

  6. 微信二维码支付-模式一(PC端,解决中文乱码问题)

    近期公司调完银联,调支付宝,调完支付宝调微信.说实话微信的帮助文档确实是烂,而且有没有技术支持,害的我头发都掉了一桌.不说废话了,看代码. 首先登陆微信的公众平台(微信的服务号不是订阅号),然后选择微 ...

  7. JHipster生成微服务架构的应用栈(二)- 认证微服务示例

    本系列文章演示如何用JHipster生成一个微服务架构风格的应用栈. 环境需求:安装好JHipster开发环境的CentOS 7.4(参考这里) 应用栈名称:appstack 认证微服务: uaa 业 ...

  8. github二次认证接收短信的问题

    这两天登陆github都被提示说我账号的密码已经被归类,提醒我修改密码. 改密码的时候发现GitHub有个二次认证的功能,分别是app和sms短信认证.app这里就不讲了,我们讲一下github的短信 ...

  9. CSS实现鼠标经过网页图标弹出微信二维码

     特点 1.纯CSS实现二维码展示功能,减少加载JS: 2.使用CSS3 transform 属性: ## 第一步 在需要展示二维码的地方添加如下代码,其中<a>标签内容可以根据需要修改成 ...

随机推荐

  1. 了解CSS overflow属性 标签: htmlcss属性 2016-12-31 14:38 75人阅读 评论(1)

    overflow属性规定当内容溢出元素框时如何显示. 例:div { width:150px; height:150px; overflow:scroll; } 可能的值有: 值           ...

  2. Bootstrap关于表单控件(Radio,CheckBox)

    表单控件(复选框checkbox和单选择按钮radio) Bootstrap框架中checkbox和radio有点特殊,Bootstrap针对他们做了一些特殊化处理,主要是checkbox和radio ...

  3. "AssertionError: View function mapping is overwriting an existing endpoint function"如何解决

    使用Flask定义URL的时候,如果出现"AssertionError: View function mapping is overwriting an existing endpoint ...

  4. 自学python 第三天

    #!/usr/bin/env python# -*- coding:utf-8 -*- # name = "***"# if "*" in name:# pri ...

  5. 洛谷 P2587 BZOJ 1034 [ZJOI2008]泡泡堂

    题目描述 //不知道为什么BZOJ和洛谷都没有这幅图了,大牛们几年前的博客上都有这幅图的,把它贴上来吧 第XXXX届NOI期间,为了加强各省选手之间的交流,组委会决定组织一场省际电子竞技大赛,每一个省 ...

  6. ACDream - Power Sum

    先上题目: Power Sum Time Limit: 20000/10000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) S ...

  7. [bzoj2631]tree_LCT

    tree bzoj-2631 题目大意:给定一个n个点的树,每个点的初始权值为1,支持:删边加边(这两个操作同时进行,保证操作之后还是一棵树),路径加,路径乘,查询路径和. 注释:$1\le n,q\ ...

  8. Linux查看文件内容命令:more(转)

    Linux more命令类似cat ,不过会以一页一页的形式显示,更方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按b键就会往回(back)一页显示,而且还有搜寻字串的功 ...

  9. HDU 2912

    直线关于球的多次反射,求最后一次反射点 #include <iostream> #include <cstdio> #include <cstring> #incl ...

  10. 3.2 re--正則表達式操作(Regular expression operations)

    本模块提供了正則表達式的匹配操作,它的功能跟Perl语言里的功能一样. 不管是Unicode字符串还是单字节8位组成的字符串,都能够使用模式匹配和字符串查找的功能. 只是要注意的是Unicode字符串 ...