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. Unity 利用FFmpeg实现录屏、直播推流、音频视频格式转换、剪裁等功能

    目录 一.FFmpeg简介. 二.FFmpeg常用参数及命令. 三.FFmpeg在Unity 3D中的使用. 1.FFmpeg 录屏. 2.FFmpeg 推流. 3.FFmpeg 其他功能简述. 一. ...

  2. QT5.5移植全攻略【转】

    一.编译1.到www.qt.io下载源码,qt-everywhere-opensource-src-5.5.0 2.设置编译器或者说平台.编译器是通过xplatform参数指定的,xplatform后 ...

  3. 【ACM】hdu_3782_xxx定律_201308011521

    xxx定律Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  4. 【ACM】hdu_1093_A+BV_201307261715

    A+B for Input-Output Practice (V)Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  5. 一个简单的ant应用

    <pre name="code" class="html"><?xml version="1.0" encoding=&q ...

  6. Windows10 显示库、隐藏6个目录、隐藏OneDrive

    Win10的资源管理器与之前的版本号最大的不同就是默认隐藏了库,又在此电脑中显示了6个用户目录. 但因为习惯了使用库进行文件的管理,这一改变有些令人不习惯. 以下就让我来教大家怎样显示库.以及隐藏这6 ...

  7. java,wavToMP3格式转换

    这里须要用到一个jar包:jave-1.0.1.jar,下载地址的话自己百度吧. 废话不多说直接贴代码: import it.sauronsoftware.jave.AudioAttributes; ...

  8. leetCode 74.Search a 2D Matrix(搜索二维矩阵) 解题思路和方法

    Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the follo ...

  9. oc4--方法

    // main.m // 第一个OC类-方法2 #import <Foundation/Foundation.h> // 1.编写类的声明 @interface Iphone : NSOb ...

  10. spring的bean管理(注解和配置文件混合使用)

    1.建三个类,在一个类中引用其他两个类 import javax.annotation.Resource; import org.springframework.beans.factory.annot ...