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. iptables 实现内网转发上网

    介绍 通过iptables做nat转发实现所有内网服务器上网. 操作 首先开启可以上网的服务器上的内核路由转发功能.这里我们更改/etc/sysctl.conf 配置文件. [root@web1 /] ...

  2. 56.doc values

    主要知识点 doc values     搜索的时候,要依靠倒排索引:在54小节中写到在聚合排序的时候如果仅仅依靠倒排索引的话是不能得出准确的结果的,需要依靠正排索引,所谓的正排索引,其实就是doc ...

  3. opencart的语言包安装

    语言包复制到对应的目录: 前台:将档案上传至商店根目录\catalog\language\ 后台:将档案上传至商店根目录\admin\language\ 在后台: 增加了中文语言包 ========= ...

  4. sqlserver日志文件太大解决方法

    SQL Server 的事务日志意外增大或充满的处理方法 事务日志文件Transaction Log File是用来记录数据库更新情况的文件,扩展名为ldf. 在 SQL Server 7.0 和 S ...

  5. java.lang.AbstractMethodError: org.apache.xerces.dom.DocumentImpl.getXmlStandalone()Z解决办法

    2019-05-20 23:02:20.168 |-INFO  [http-nio-8001-exec-2] com.xxx.ecc.cloudbiz.service.payment.impl.Wei ...

  6. HDU 4513 manacher

    Manacher算法,相当于求回文串. 关于Manacher,转 http://blog.sina.com.cn/s/blog_70811e1a01014esn.html 现在进入正题:首先,在字符串 ...

  7. currentThread()方法返回代码段正在被哪个线程调用

    currentThread()方法返回代码段正在被哪个线程调用 package com.stono.thread2.page16; public class MyThread extends Thre ...

  8. Android解决使用findViewById时须要对返回值进行类型转换问题的辅助类

    在我们的开发工作时,findViewById可能是用得最多的函数之中的一个.但它特别讨厌的地方就是我们常常须要对返回的view进行类型转换,输入麻烦.代码丑陋,比如曾经我们在Activity中找一些子 ...

  9. 11gR2 Database Services for &quot;Policy&quot; and &quot;Administrator&quot; Managed Databases (文档 ID 1481647.1)

    In this Document   Purpose   _afrLoop=1459311711568804&id=1481647.1&displayIndex=6&_afrW ...

  10. oc13--pragma mark

    // // main.m // #pragma mark基本使用 // // Created by xiaomage on 15/6/18. // Copyright (c) 2015年 xiaoma ...