asp. net微信开发实战 29-微信公众平台开发(十二):网页授权获取用户基本信息
H5微信公众号授权的简单实现步骤
H5微信公众号授权的简单实现步骤前⾔昨天因为有⼀个项⽬上⾯需要实现h5微信授权⼯作。
所以花了两个⼩时来完成这个功能。
开始⼯作前做的准备流程说明【提前沟通过的流程】1. 微信授权具有时效性,⼀段时间内授权之后,就不需要在重复点击确认。
如果卸载微信重新安装,还是需要重新确认授权的。
2. 不管是第⼀次确认授权还是授权之后,都可以通过微信服务器授权回调到我们的后端接⼝回调。
3. 微信授权回调之后,会返回回调回来的code&state参数,后端可以通过code获取accessToken,然后通过accessToken获取⽤户信息4. 后端在接收到服务器回调之后,在回调到前端的时候存在两个主要的字段,isAuth代表是否授权,isBindFlag代表是否在我们系统当中已经注册登录。
这⾥因为我们当前的系统需要⽤户授权注册,所以存在这两个字段。
域名,端⼝准备好的域名 - 公安部备案的域名端⼝号使⽤80端⼝域名和端⼝号的要求是因为微信公众号配置域名以及微信服务器回调都需要域名和80端⼝。
这⾥同⼀个域名,端⼝适配前后端IP,通过nginx统⼀代理处理。
准备就绪开始⼯作域名:前端资源部署:后端回调接⼝:/api/auth配置微信公众号域名配置服务器根路径上传校验⽂件,不然域名配置保存不了。
⽩名单配置书写代码import React, { useEffect } from "react";import { View } from "@tarojs/components";export default () => {useEffect(() => {// 后端回调回来路径格式:/#/pages/webAuthorization?bindFlag=0&openid=xxxxxxxxxxx&unionid=null&isAuth=truevar isBindFlag = false, isAuth = false, opendId = '', paramsArray = [];/** 省略代码:地址判断,参数处理赋值给isAuth, isBindFlag, openId*/if (!isAuth) { // 未授权window.location.href=`https:///connect/oauth2/authorize?appid=${'xxxxxxx'}&redirect_uri=http://xxxxx/api/auth?response_type=code&scope=snsapi_userinfo&state=STATE&connect_redirect=1#wechat_redirect`; } else if (!isBindFlag) { // 未注册window.location.href = '#/pages/login'} else { // 登录window.location.href = '#/pages/index'}}, []);return (<View></View>);};总结到此这篇关于H5微信公众号授权的⽂章就介绍到这了,更多相关微信公众号授权内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。
Python微信公众号开发实践
Python微信公众号开发实践Python语言的强大功能和丰富的库使其成为了众多开发者的首选,尤其在微信公众号开发方面更是如此。
本文将探讨Python在微信公众号开发中的实践经验,介绍一些常用的开发工具和技术,并分享一些实际项目中的应用案例。
一、微信公众号开发简介微信公众号是基于微信平台的应用程序,通过公众号可以向用户提供各类信息服务和功能。
公众号开发主要涉及到消息处理、菜单设置、用户管理、素材管理等方面。
Python作为一种高效、易用且功能强大的编程语言,在微信公众号开发中得到了广泛的应用。
二、开发工具和技术1. 微信公众平台开发者工具微信提供了一套开发者工具,可以帮助我们快速搭建和调试微信公众号应用。
该工具支持本地开发和线上测试,方便我们开发过程的调试和验证。
2. Python开发框架 FlaskFlask是一个轻量级的Python Web框架,适合用于微信公众号的开发。
它简单易用,同时具备了良好的扩展性,可以方便地实现消息处理、菜单设置等功能。
3. 微信公众号开发库 WeChatpyWeChatpy是一个Python开发的微信公众号开发库,提供了一系列方便易用的接口和工具,可以帮助我们更加高效地开发微信公众号功能。
它支持各种消息类型的处理、菜单设置、用户管理等功能。
三、实际项目案例1. 自动回复功能在微信公众号中,用户发送消息后,可以根据关键词自动回复相应的内容。
我们可以使用Python编写代码,通过调用微信公众平台的接口实现这一功能。
例如,当用户发送“天气”关键词时,我们可以根据用户所在地的天气情况自动回复相关天气信息。
2. 菜单设置微信公众号可以设置自定义菜单,在菜单中添加各类功能入口,方便用户使用。
我们可以通过Python开发框架和微信公众号开发库,编写代码来实现菜单的创建和管理。
例如,我们可以创建一个菜单项,点击后可以跳转到我们的网站或者展示一张图片。
3. 素材管理微信公众号中可以上传和管理各种素材,包括文字、图片、音频、视频等。
微信公众平台开发教程第12章
微信支付开发配置页面
添加支付授权目录”对话框
12.2 JSAPI支付
12.2.1 准备配置参数
在应用程序的web.config中增加下面的配置参数: <add key="APPID" value="**************" /> <add key="MCHID" value="*********************" /> <add key="PARTNER_KEY" value="************" /> <add key="APPSECRET" value="****************" /> <add key="SSLCERT_PATH" value="**************" /> <add key="SSLCERT_PASSWORD" value="************" /> <add key="NOTIFY_URL" value="http://***********wxPayService
public static class wxPayService { public static readonly string APPID =weixinService.appid; // 公众号的APPID public const string TENPAY = "1"; public static readonly string PARTNER = ConfigurationManager.AppSettings["MCHID"].ToString();//商户号 public static readonly string APPSECRET = ConfigurationManager.AppSettings["appsecret"].ToString(); public static string PARTNER_KEY = ConfigurationManager.AppSettings["PARTNER_KEY"].ToString(); public static readonly string OAUTH2 = "https:///connect/oauth2/authorize"; public static readonly string OAUTH2_ACCESS_TOKEN = "https:///sns/oauth2/access_token"; //服务器异步通知页面路径 public static readonly string TENPAY_NOTIFY = ConfigurationManager.AppSettings["NOTIFY_URL"].ToString(); …… }
微信公众开发平台教程
微信公众开发平台教程微信公众开发平台是一个提供给开发者使用的平台,可以通过该平台实现微信公众号的开发和管理。
本教程将为你介绍如何使用微信公众开发平台进行开发,并提供一些常见问题的解决方案。
首先,你需要在微信公众开发平台注册一个开发者账号。
注册成功后,你可以获得一个唯一的AppID和AppSecret,这将用于后续开发中的身份验证。
接下来,你可以选择使用Java、Python、PHP等多种编程语言进行开发。
微信公众开发平台提供了相应的SDK和文档,方便开发者使用。
你可以根据自己的需求选择适合的语言和工具。
在进行开发之前,你需要了解微信公众号的基本功能和特点。
公众号可以通过菜单、消息回复等方式与用户进行交互。
你可以开发自定义菜单、回复自动消息、获取用户信息等功能,丰富用户体验。
在开发过程中,你可能会遇到一些问题。
例如,如何接入微信支付、如何处理用户留言、如何提高公众号的安全性等。
微信公众开发平台提供了详细的文档和示例代码,你可以参考这些资料来解决问题。
另外,微信公众开发平台还提供了一些高级功能,例如群发消息、图文消息等。
这些功能可以帮助你更好地管理和运营公众号,提高用户粘性和活跃度。
最后,你需要在开发完成后进行发布和测试。
微信公众开发平台提供了测试号功能,你可以使用测试号进行测试和调试。
如果开发完成后一切正常,你可以申请上线,将公众号正式发布给用户使用。
总而言之,微信公众开发平台是一个强大的开发工具,可以帮助你轻松实现微信公众号的开发和管理。
通过学习本教程,你可以掌握如何使用微信公众开发平台进行开发,并解决一些常见问题。
希望本教程能帮助到你,祝你在微信公众开发中取得成功!。
微信公众平台开发教程
微信公众平台开发教程一、了解公众平台公众平台是提供的一种服务,它允许企业、组织或个人在平台上创建自己的,通过发布消息、互动等方式与用户进行沟通。
本文将介绍公众平台开发的基本步骤和注意事项。
二、创建1、打开公众平台官网,点击右上角的“立即注册”。
2、在注册页面中,选择的类型,如订阅号、服务号或企业号。
不同类型的有不同的功能和限制,需要根据自己的需求进行选择。
3、填写注册信息,包括账号名称、头像、介绍等。
这些信息将用于创建,请确保准确无误。
4、提交注册信息后,公众平台将审核你的申请。
审核通过后,即可使用进行开发和运营。
三、开发1、登录公众平台,选择开发选项卡。
2、在开发页面中,你可以看到公众平台提供的开发文档和接口。
这些文档和接口是开发的基础。
3、根据自己的需求,进行相应的开发工作。
例如,你可以编写自定义的菜单、回复用户的消息、实现自动回复等功能。
4、在开发过程中,你可以使用公众平台的开发工具进行调试和测试。
开发工具提供了一个模拟器,可以帮助你测试的基本功能。
四、发布1、完成开发后,你可以在公众平台上发布你的。
登录公众平台,选择发布选项卡。
2、在发布页面中,你可以上传图片、编写文章等内容。
根据你的需求,设置的可见性、推送频率等选项。
3、点击发布后,你的将出现在的列表中,用户可以通过搜索或扫描二维码来你的。
五、注意事项1、开发需要一定的编程知识和经验。
如果你不具备相关技能,可以参考公众平台的开发文档或寻求专业开发人员的帮助。
2、开发需要遵守公众平台的开发规范和要求。
在开发过程中,请确保你的不会侵犯他人的权益或传播不良信息。
3、开发需要投入一定的时间和精力来进行开发和测试。
为了提高的品质和用户体验,需要在发布前进行充分的测试和优化。
微信公众平台开发教程一、了解公众平台公众平台是提供的一种服务,它允许企业、组织或个人在平台上创建自己的,通过发布消息、互动等方式与用户进行沟通。
本文将介绍公众平台开发的基本步骤和注意事项。
[JAVA实现]微信公众号网页授权登录
[JAVA实现]微信公众号⽹页授权登录⽹上搜资料时,⽹友都说官⽅⽂档太垃圾了不易看懂,如何如何的。
现在个⼈整理了⼀个通俗易懂易上⼿的,希望可以帮助到刚接触微信接⼝的你。
请看流程图!看懂图,就懂了⼀半了:其实整体流程⼤体只需三步:⽤户点击登录按钮(其实就相当于⼀个链接) ---》⽤户点击授权登录 ----》实现获取⽤户信息代码。
然后获取⽤户信息代码只需三步:获取code ----》通过code获取access_token和openId ---》通过access_token和openId获取⽤户信息(包含union)。
以上便是整体套路,当然官⽹上也有,但具体如何实现呢?不着急,咱们⼀步⼀步来!第⼀步:微信登录按钮它其实就是⼀个连接,不过想得到这个链接,有⼀点点⿇烦。
& response_type=code(固定的) & scope = snsapi_userinfo(或者snsapi_base默认授权) & state=STATE#wechat_redirect这个链接中参数的具体含义,官⽅解释如下:参数是否必须说明appid是公众号的唯⼀标识redirect_uri是授权后重定向的回调链接地址,请使⽤urlencode对链接进⾏处理response_type是返回类型,请填写codescope是应⽤授权作⽤域,snsapi_base (不弹出授权页⾯,直接跳转,只能获取⽤户openid),snsapi_userinfo (弹出授权页⾯,可通过openid拿到昵称、性别、所在地。
并且,即关注的情况下,只要⽤户授权,也能获取其信息)state否重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节#wechat_redirect是⽆论直接打开还是做页⾯302重定向时候,必须带此参数第⼆步:授权确认登录这⼀步最简单,第⼀步登录链接拼好后,在⼿机微信中打开,微信便会跳转到确认授权页⾯,点击确认授权即可。
微信公众平台开发者教程
微信公众平台开发者教程微信公众平台是融合了微信用户庞大基数和丰富社交功能的一种互联网平台,提供了丰富的开发接口和工具,方便开发者开发各种基于微信的应用和服务。
本文将简要介绍如何进行微信公众平台的开发。
首先,开发者需要注册一个微信公众号账号,获取到公众号的唯一标识和密钥,这是后续进行开发的基础。
其次,开发者可以选择使用微信公众平台提供的开发接口和工具,进行二次开发。
微信公众平台提供了多种接口,包括基础接口、高级接口和移动应用接口等,开发者可以根据需求选择合适的接口进行开发。
同时,微信公众平台还提供了开发者文档和 SDK,方便开发者了解接口的使用方法和进行开发。
在进行开发时,首先需要将开发者账号与公众号绑定,然后就可以创建自定义菜单、自动回复消息、获取用户信息等功能。
开发者可以通过调用接口实现这些功能,并根据自己的业务需求,进行个性化的定制。
在开发过程中,开发者需要根据微信公众号的要求,对开发的应用进行安全性、规范性的审核。
这包括申请审核开发者身份、API权限申请、功能指引和规范等方面。
只有通过审核的应用才能正常使用和向用户提供服务。
最后,开发者需要进行测试和发布。
微信公众平台提供了模拟器工具,方便开发者进行本地测试。
开发完成后,需要上传应用到微信公众号,进行线上测试,并提交给微信团队进行审核。
一旦通过审核,应用就可以在用户中心进行下载安装使用。
总而言之,微信公众平台开发者教程是介绍如何进行微信公众平台开发的指南,包括注册账号、选择接口、编写代码、测试发布等方面。
通过学习和掌握开发者教程,开发者可以快速上手,开发出各种基于微信的应用和服务,为用户提供更好的微信体验。
使用ASPNET和微信公众平台消息接口开发自助查询系统或电子优惠
使用和微信公众平台消息接口开发自助查询系统或电子优惠劵随着Android、iPhone、WindowsPhone等智能移动终端的日益普及,越来越多的人开始习惯随时随地利用碎片化时间了解资讯、查询信息,甚至是处理业务。
微信,这个同时具备文字聊天、语音短信、视频对话、图片分享和二维码扫描的通讯工具,在仅仅一年多的时间里,就积累了两亿多的用户;而微信公众平台的诞生,更是为微信锦上添花,也为很多想要提供移动信息服务的企业提供了一个低廉、便捷的信息服务平台。
一、微信公众平台可以做什么?1、二维码订阅通过在商家门口、宣传单、名片上发布公众号二维码,微信用户可随手订阅。
2、消息推送通过用户分组和地域控制,实现精准的消息推送,直指目标用户。
3、品牌传播借助个人关注页和朋友圈,实现品牌的病毒式传播。
4、实现自助查询系统通过微信公众平台提供的关键词自动回复功能,调用公众平台消息接口,便可以通过自己的服务器处理用户发送的消息并立即向用户返回处理的结果。
5、发送电子优惠劵或短信优惠劵通过微信公众平台提供的消息接口,可以发送指令获得商家提供的电子优惠劵,或者发送手机号码获得商家提供的短信优惠劵。
二、使用微信作为客户端的好处1.微信支持iPhone、Android、WindowsPhone、Symbian、BlackBerry等智能终端,用户群体广,操作简单。
2.商家可省去开发iPhone等智能终端程序的一大笔费用。
3.开发周期短,一般1-3个小时左右即可完成。
4.开发费用低,一般一个人几百元即可完成。
三、微信公众平台应用案例1、科创学院自助查询系统(微信号:cqiecx)开发环境:2.0+SQLServer2000微信指令及功能说明(一)查询指令1、输入0查询所有功能菜单2、输入1查询工资扣款明细3、输入2查询学生考试成绩4、输入3查询常用服务电话5、输入4查询常用服务网站6、输入5提供建议意见反馈7、输入6查询个人课表日程8、输入7查询常用微信账号(二)绑定指令1、教师输入GH工号进行微信号与统一身份认证的绑定2、学生输入XH学号进行微信号与统一身份认证的绑定(三)激活指令1、教师输入JH身份证后6位进行激活2、学生输入JHXH身份证后6位进行激活2、127社区帖子查询(微信号:cq127com)开发环境:PHP5.2.8+MySQL5微信指令及功能说明:输入要查询的关键字,即可自动返回论坛相关帖子标题及链接。
微信公众平台开发——微信授权登录(OAuth2.0)
微信公众平台开发——微信授权登录(OAuth2.0)1、OAuth2.0简介 OAuth(开放授权)是⼀个开放标准,允许⽤户让第三⽅应⽤访问该⽤户在某⼀⽹站上存储的私密的资源(如照⽚,视频,联系⼈列表),⽽⽆需将⽤户名和密码提供给第三⽅应⽤。
允许⽤户提供⼀个令牌,⽽不是⽤户名和密码来访问他们存放在特定服务提供者的数据。
每⼀个令牌授权⼀个特定的⽹站(例如,视频编辑⽹站)在特定的时段(例如,接下来的2⼩时内)内访问特定的资源(例如仅仅是某⼀相册中的视频)。
这样,OAuth允许⽤户授权第三⽅⽹站访问他们存储在另外的服务提供者上的信息,⽽不需要分享他们的访问许可或他们数据的所有内容。
我们这⾥主要模拟在微信公众号中使⽤OAuth2.0进⾏授权,获取⽤户的基本信息的过程。
详细的开发⽂档可查看微信的官⽅⽂档。
微信公众平台开发者⽂档:2、获取测试公众账号及其相关配置1)、公众测试账号获取 访问上⾯的连接,选择“接⼝测试号申请”获得直接打开通过微信客户端扫码登录即可登录。
登录完即可获取到⼀个测试公众账号的信息。
主要有appId和appsecret两个参数,这将唯⼀标⽰⼀个公众号,并且需要将他们作为参数获取⽤户的信息。
2)、关注公众号 ⽤户只有关注了这个公众号了,才能通过打开有公众号信息的链接去授权第三⽅登录,并获取⽤户信息的操作。
故我们还需要⽤我们的微信关注微信号,操作如下: 还是刚刚那个登录成功后跳转的页⾯,我们可以看到,该页⾯有⼀个⼆维码,我们可以通过扫描该⼆维码进⾏关注,关注成功在右边的“⽤户列表”会多⼀个⽤户的信息。
如下图所⽰:3)、配置回调函数 我们在微信客户端访问第三⽅⽹页(即我们⾃⼰的⽹页)的时候,我们可以通过微信⽹页授权机制,我们不仅要有前⾯获取到的appid和appsecret还需要有当⽤户授权之后,回调的域名设置,即⽤户授权后,页⾯会跳转到哪⾥。
具体的配置如下: 还是在刚刚的页⾯,有⼀个“⽹页授权获取⽤户基本信息”,点击后⾯的修改 填写回调的域名: 如果你的⽹址没有被列⼊过⿊名单,就会在顶部出现然后,域名配置就成功了!注意:1、这⾥填写的是域名(是⼀个字符串),⽽不是URL,因此请勿加http://等协议头;2、授权回调域名配置规范为全域名,⽐如需要⽹页授权的域名为:,配置以后此域名下⾯的页⾯/music.html 、 /login.html 都可以进⾏OAuth2.0鉴权。
微信公众号实现扫码获取微信用户信息(网页授权)
微信公众号实现扫码获取微信⽤户信息(⽹页授权)刚开始接触微信的时候⼀头雾⽔,领导想要⼀个扫码获取微信⽤户信息的功能,⽽且是扫的别⼈的⼆维码,我是⼀阵忙活啊。
经过努⼒和尝试,终于功夫不负有⼼⼈啊,赶紧记录⼀下,我⽤的是thinkphp编写的。
第⼀步:就是⼆维码的⽣成1.⾸先要确定第⼀个⼆维码,因为既然是扫码,肯定是要第⼀个⼆维码的,也就是第⼀⼈才可以。
我将第⼀个⼆维码的唯⼀值(id)设置成零,然后开始我的编写2.既然是⼆维码,我⽤了phpqrcode⼆维码⽣成插件,⼆维码的⽣成可以在本地编写,查看效果后再上传服务器。
(1)从⽹上下载下phpqrcode插件包,将它放到thinkphp的⽂件⾥,路径如下:ThinkPHP\Library\Vendor ,截图如下:(2)⼆维码的⽣成,在调⽤显⽰⼆维码的控制器的⽅法中调⽤这个插件包,然后设置下扫描后跳转的URL就好了,代码如下:$url ="";$level=3;$size=4;Vendor('phpqrcode.phpqrcode'); //引⼊插件$errorCorrectionLevel = intval($level) ;//容错级别$matrixPointSize = intval($size);//⽣成图⽚⼤⼩//⽣成⼆维码图⽚$object = new \QRcode();$path = "Public/ER/1.png"; //本地⽂件存储路径$object->png($url, $path, $errorCorrectionLevel, $matrixPointSize, 2);这只是实现⽣成⼆维码并且可以进⼊⼆维码指定的⽹址,真正要实现的⽬的是扫带有参数的⼆维码,获取微信⽤户的信息下⾯就是怎么实现⽣成带有参数的⼆维码3.(1)要⽤到微信的⽹页授权,就要⽤到公众号的⼏个参数:1是AppID 2是AppSecret 这是公众号申请成功后分配下来的(2)利⽤这两个参数,然后再配合获取access_token的值就可以了代码如下(扫描后跳转到getUserInfo⽅法,并且把唯⼀键值传过去):$tid = 0; //传值的参数$level=3;$size=4;Vendor('phpqrcode.phpqrcode');$errorCorrectionLevel = intval($level) ;//容错级别$matrixPointSize = intval($size);//⽣成图⽚⼤⼩//⽣成⼆维码图⽚$object = new \QRcode();$path = "Public/ER/" . $tid . ".png"; //本地⽂件存储路径$object->png($url, $path, $errorCorrectionLevel, $matrixPointSize, 2);$appid='******'; //公众号唯⼀标识$redirect_uri = urlencode ( 'http://www.****.net/index.php/Admin/Sindex/getUserInfo?id='.$tid ); //这个是设置参数和授权后重定向的回调链接地址//snsapi_userinfo弹出授权页⾯,可通过openid拿到昵称、性别、所在地 snsapi_base ,不弹出授权页⾯,直接跳转,只能获取⽤户openid $url ="https:///connect/oauth2/authorize?appid=$appid&redirect_uri=$redirect_uri&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect"; 下⾯是写跳转后的操作(1)接收传过来的值(2)取得openid(3)根据全局access_token和openid查询⽤户信息(4)将信息写⼊数据库获取openid或者其他的东西,⽤到下⾯的⽅法,可以快速截取到需要的东西function getJson($url){$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);$output = curl_exec($ch);curl_close($ch);return json_decode($output, true);} 接下来就是将上⾯的步骤逐⼀实现,代码如下:public function getUserInfo(){$appid = "*****"; //公众号唯⼀标识$secret = "*****"; //应⽤秘钥//$code是回调的时候地址上带的只需要get⽅式接收就可以了$code = $_GET["code"];//获取传过来的值$htjid = $_GET["id"];//第⼀步:取得openid$oauth2Url = "https:///sns/oauth2/access_token?appid=$appid&secret=$secret&code=$code&grant_type=authorization_code";$oauth2 = $this->getJson($oauth2Url);//第⼆步:根据全局access_token和openid查询⽤户信息$access_token = $oauth2["access_token"];$openid = $oauth2['openid'];$get_user_info_url = "https:///sns/userinfo?access_token=$access_token&openid=$openid&lang=zh_CN";$userinfo = $this->getJson($get_user_info_url);//写⼊数据库微信⽤户M()->startTrans();//开启事务$n = M("zp_user"); //写⼊的表$openid = $data['openid'] = $userinfo['openid']; //微信⽤户openid$data['sex'] = $userinfo['sex']; //性别$data['headimgurl'] = $userinfo['headimgurl']; //头像$data['province'] = $userinfo['province']; //地区sheng$data['city'] = $userinfo['city']; //地区shi$data['subscribe_time'] = time(); //时间$data['qr_scene'] = $htjid; //传过的值$data['nickname'] = $userinfo['nickname']; //昵称$z = $n->lock(true)->add($data);if(!$z){M()->rollback();//回滚$this->error('添加错误!');}else{M()->commit();//事务提交}}到此,就可以实现扫描⼆维码获取⽤户信息了,并且将⽤户信息写⼊数据库这是第⼀个⼆维码,⽣成后,就可以将id的参数值换成前⾯传过来的值,也就是扫码的值 $tid = 0; //传值的参数如果想要⾃⼰的⼆维码页⾯好看的话,⽐如想要把⾃⼰的微信昵称和⼆维码合成⼀张图⽚的话,也是可以实现的,这就要⽤到图⽚的合成了,下次再说吧。
C#微信公众号开发之网页授权
C#微信公众号开发之网页授权oauth2.0获取用户基本信息在微信里面,非认证的公众号账号,只能通过在微信回复菜单单击等事件获取openid,但是认证的公众账号(之前认证的订阅号是不可以的,现在新开放了)可以直接在微信打开的链接中获取用户的基本信息包括openid。
这里用一种比较简单的获取用户信息的网页授权的方式。
注意:这种方式只可以获取关注用户的信息,非关注用户是不可以获取的。
流程图一、获取Code假设我们需要网页授权的页面的地址为redirect_uri需要获取Code的话我们第一步是跳转到授权地址,我们第一步便是获取拼接授权地址 --采用snsapi_base方式////// 对页面是否要用授权用snsapi_base方式获取Code Appid是微信应用id///public string GetCodeUrl(string Appid, string redirect_uri){return string.Format("https:///connect/oauth2/authorize?appid={0} &redirect_uri={1}&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect", Appid, redirect_uri);}当在微信中打开如下地址的时候如果授权成功,会自动跳转到页面redirect_uri?code=CODE&state=STATE,这样我们就可以获取到Code了二、用Code换取Openid用get方法获取到json格式的数据,{"access_token":"ACCESS_TOKEN","expires_in":7200,"refresh_token":"REFRESH_TOKEN","openid":"OPENID","scope":"SCOPE","unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"}然后获取openid////// 用Code换取Openid///public string CodeGetOpenid(string Code) {string url = string.Format("https:///sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code", Appid, Appsecret, Code);string ReText = WebRequestPostOrGet(url,"");//post/get方法获取信息Dictionary DicText = (Dictionary)Jss.DeserializeObject(ReText);if (!DicText.ContainsKey("openid"))return "";return DicText["openid"].ToString();}三、用openid获取用户基本信息其中access_token 是微信凭证如何获取参照之前的博客/net-xiejun/p/4422890.html////// 用openid换取用户信息//////微信标识id///public Dictionary GetUserInfo(string openid){JavaScriptSerializer Jss = new JavaScriptSerializer();string access_token = ApiCommon.getTokenSession(Appid,Appsecret);//获取access_tokenstring url = string.Format("https:///cgi-bin/user/info?access_token={0}&openid={1}&lang=zh_CN",access_token, openid);Dictionary respDic = (Dictionary)Jss.DeserializeObject(WebRequestPostOrGet(url, ""));return respDic;}在页面对应的cs文件中的代码:OAuth2 OAuth2 = new OAuth2();public ActionResult ApplicantActivety(){if (!string.IsNullOrEmpty(Request.QueryString["code"])){Dictionary DicJson =OAuth2.GetUserInfo(GetOpenidSession(Request.QueryString["code"].ToString()));ViewData["nickname"] = DicJson["nickname"];ViewData["headimgurl"] = DicJson["headimgurl"];}else {string redirect_uri = "Http://"+Request.Url.Authority+ Request.Url.PathAndQuery;Response.Redirect(OAuth2.GetCodeUrl(redirect_uri));}return View();}//拉取缓存private string GetOpenidSession(string Code){if (Session["OpenidSession"] != null){OAuth2.OpenidSession = Session["OpenidSession"].ToString();}else{OAuth2.OpenidSession = OAuth2.CodeGetOpenid(Code);Session["OpenidSession"] = OAuth2.OpenidSession;Session.Timeout = 7200;}return OAuth2.OpenidSession;}到此微信网页授权就开发完成了!。
开发微信公众平台帮助代码C# Asp
开发公众平台帮助代码CAsp一、介绍在本文档中,我们将介绍如何使用CAsp来开发公众平台帮助代码。
公众平台帮助代码是一个用于处理公众平台各种功能的代码库,它提供了一系列API和工具,帮助开发者快速开发公众平台相关应用。
二、环境配置1.安装Visual Studio请从官方网站并安装Visual Studio,确保你的电脑上已经正确配置了C开发环境。
2.安装开发者工具包我们可以从NuGet包管理器中搜索并安装开发者工具包,该工具包包含了公众平台的API和一些辅助工具。
三、项目搭建1.创建一个新的CAsp项目2.配置项目在项目中添加所需的引用和依赖项,确保项目能够正常编译和运行。
在项目的配置文件中添加公众平台的配置信息,包括AppID、AppSecret等。
四、接口验证1.接口配置在公众平台后台的开发设置中,配置URL和Token等参数,用于接口验证。
将配置信息保存在项目的配置文件中。
2.接口验证代码在项目中添加用于接口验证的代码,验证请求中的Token和接口URL是否一致。
如果验证成功,返回echostr参数的值,验证失败则返回错误信息。
五、事件处理1.关注事件处理当用户关注公众号时,公众平台会向开发者服务器发送一个关注事件通知。
在项目中添加处理关注事件的代码,可以发送欢迎消息、记录用户信息等。
2.消息事件处理当用户向公众号发送消息时,公众平台会向开发者服务器发送一个消息事件通知。
在项目中添加处理消息事件的代码,可以根据不同类型的消息,回复对应的消息内容。
六、菜单管理1.创建菜单在项目中添加创建菜单的代码,通过调用开发者工具包中的API,将菜单信息发送到公众平台,并在公众号中显示。
2.修改菜单在项目中添加修改菜单的代码,通过调用开发者工具包中的API,更新已有的菜单信息。
七、附件本文档附件包括示例代码、项目配置文件和相关截图,请查阅附件文件。
八、法律名词及注释1.AppID:公众号的唯一标识符。
九、总结本文档详细介绍了如何使用CAsp开发公众平台帮助代码,包括环境配置、项目搭建、接口验证、事件处理、菜单管理等相关内容。
微信开发之微信网页授权
微信开发之微信⽹页授权微信⽹页授权官⽅接⼝⽂档:⼀、通过⽹页授权,可以获取⽤户微信的基本信息。
⼆、总共有5个步骤:关于应⽤授权作⽤域的两种scope的区别说明snsapi_base 不弹出授权页⾯,直接跳转,只能获取⽤户openid。
snsapi_userinfo 弹出授权页⾯,可通过openid拿到昵称、性别、所在地。
开始贴代码1 获取授权链接,微信重定向到授权界⾯public String getAuthorizationLink(WeixinPublicAuthorizeReqModel query) throws Exception {String authorization_url="";String redirect_uri = URLEncoder.encode(query.getRedirectUrl(),"UTF-8");if (!StringUtil.isEmpty(query.getScope()) && "snsapi_userinfo".equals(query.getScope())) {// ⽤户确认授权authorization_url = WeixinConfig.PUBLIC_AUTHORIZE+"?appid="+WeixinConfig.APPID+"&redirect_uri="+redirect_uri+"&response_type=code&scope=snsapi_userinfo"+"&state=123#wechat_redirect";}else {// 静默授权authorization_url = WeixinConfig.PUBLIC_AUTHORIZE+"?appid="+WeixinConfig.APPID+"&redirect_uri="+query.getRedirectUrl()+"&response_type=code&scope=snsapi_base"+"&state=123#wechat_redirect"; }return authorization_url ;}2 通过code换取⽹页授权access_tokenpublic WeixinPublicUserinfoRespModel getWeixinSnsapiUserInfo(WeixinPublicUserinfoReqModel query) throws Exception { WeixinPublicUserinfoRespModel respModel = new WeixinPublicUserinfoRespModel();String code = query.getCode();String scope = query.getScope();String getTokenUrl = WeixinConfig.PUBLIC_ACCESS_TOKEN + "?appid=" + WeixinConfig.APPID + "&secret="+ WeixinConfig.APPSECRET + "&code=" + code + "&grant_type=authorization_code";String doResult = HttpUtils.doGet(getTokenUrl);("[code换取⽹页授权access_token]微信响应结果{}", JSON.toJSONString(doResult));JSONObject jsonResult = JSONObject.fromObject(doResult);if (jsonResult != null && jsonResult.containsKey("openid")) {String openId = jsonResult.getString("openid");String accessToken = jsonResult.getString("access_token");} else {respModel.setErrcode(jsonResult.getString("errcode"));respModel.setErrmsg(jsonResult.getString("errmsg"));}3 获取微信⽤户个⼈信息if (!StringUtil.isEmpty(code) && "snsapi_base".equals(scope)) {respModel.setOpenid(openId);}if (!StringUtil.isEmpty(code) && "snsapi_userinfo".equals(scope)) {String getUserInfoUrl = WeixinConfig.PUBLIC_USERINFO;String params = "?access_token=" + accessToken + "&openid=" + openId + "&lang=zh_CN";getUserInfoUrl = getUserInfoUrl + params;String userResult = HttpUtils.doGet(getUserInfoUrl);("[拉取微信⽤户个⼈信息]微信响应结果{}", JSON.toJSONString(userResult)); JSONObject userJson = JSONObject.fromObject(userResult);if (userJson != null && userJson.containsKey("openid")) {respModel.setOpenid(userJson.getString("openid"));respModel.setNickname(userJson.getString("nickname"));respModel.setSex(userJson.getString("sex"));respModel.setProvince(userJson.getString("province"));respModel.setCity(userJson.getString("city"));respModel.setCountry(userJson.getString("country"));respModel.setHeadimgurl(userJson.getString("headimgurl"));// 对⾮必现字段加以判断,防⽌空指针if (userJson.containsKey("privilege")) {respModel.setPrivilege(userJson.getJSONArray("privilege").toString());}if (userJson.containsKey("unionid")) {respModel.setPrivilege(userJson.getString("unionid"));}} else {respModel.setErrcode(userJson.getString("errcode"));respModel.setErrmsg(userJson.getString("errmsg"));}。
微信公众平台,网页授权及40029问题解决
微信公众平台,⽹页授权及40029问题解决1、跳转授权链接&connect_redirect=1 这个参数,刚开始没有加,总是报 {'errcode':40029,'errmsg':'invalid code, hints: [ req_id: 0407ns44 ]'} 这个错误,调试时发现会访问两次,⼀次是301,页⾯重定向了,第⼆次跟第⼀次就差这个参数。
加上后,不再报错。
code 可以了。
⼆需要注意的是 redirect_uri = xxx 需要⾃⼰URL转码2、获取⽤户信息,直接上代码。
<%@ WebHandler Language="C#" Class="getinfos" %>using System;using System.Web;using Newtonsoft.Json.Linq;using ;using System.IO;using System.Text;public class getinfos : IHttpHandler {public void ProcessRequest (HttpContext context) {//⼀切都从这⾥开始string code = context.Request["code"].ToString();context.Response.ContentType = "text/plain";context.Response.Write(GetInfos(code));}public bool IsReusable {get {return false;}}public string GetInfos(string _code){//string _access_tokens = GetToken(_code);JObject json = JObject.Parse(_access_tokens);string access_token = json["access_token"].ToString();string refresh_token = json["refresh_token"].ToString();string openid = json["openid"].ToString();//string _infos = GetUserInfo(access_token, openid);JObject info = JObject.Parse(_infos);if (info["errcode"] != null){_access_tokens = RefreshToken(refresh_token);json = JObject.Parse(_access_tokens);access_token = json["access_token"].ToString();openid = json["openid"].ToString();_infos = GetUserInfo(access_token, openid);}return _infos;}///<summary>///⽤code 获取 Token///</summary>private string GetToken(string _code){if (_code.IndexOf("\"") > -1)_code = _code.Replace("\"", "");string URL = "https:///sns/oauth2/access_token";string RequestPara = "?appid=xxx";RequestPara += "&secret=xxx";RequestPara += "&code=" + _code;RequestPara += "&grant_type=authorization_code";string _access_tokens = GetData(URL, RequestPara);_access_tokens = _access_tokens.Replace("\"", "'");return _access_tokens;}///<summary>///获取⽤户信息///</summary>private string GetUserInfo(string access_token, string openid){if (access_token.IndexOf("\"") > -1)access_token = access_token.Replace("\"", "");if (openid.IndexOf("\"") > -1)openid = openid.Replace("\"", "");string I_URL = "https:///sns/userinfo";string I_RequestPara = "?access_token=" + access_token;I_RequestPara += "&openid=" + openid;I_RequestPara += "&lang=zh_CN";string _infos = GetData(I_URL, I_RequestPara);_infos = _infos.Replace("\"", "'");return _infos;}///<summary>///刷新 Token///</summary>private string RefreshToken(string refresh_token){if (refresh_token.IndexOf("\"") > -1)refresh_token = refresh_token.Replace("\"", "");string R_URL = "https:///sns/oauth2/refresh_token";string R_RequestPara = "?appid=xxx";R_RequestPara += "&grant_type=refresh_token";R_RequestPara += "&refresh_token=" + refresh_token;string _infos = GetData(R_URL, R_RequestPara);_infos = _infos.Replace("\"", "'");return _infos;}///<summary>///访问地址,并获取数据///</summary>private string GetData(string URL, string RequestPara){RequestPara = RequestPara.IndexOf('?') > -1 ? (RequestPara) : ("?" + RequestPara);WebRequest hr = HttpWebRequest.Create(URL + RequestPara);byte[] buf = System.Text.Encoding.GetEncoding("utf-8").GetBytes(RequestPara);hr.Method = "GET";.WebResponse response = hr.GetResponse();StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("utf-8"));string ReturnVal = reader.ReadToEnd();reader.Close();response.Close();return ReturnVal;}}。
微信公众号网页授权获取用户信息
微信公众号⽹页授权获取⽤户信息微信公众号⽹页授权获取⽤户信息近期做过微信公众号这块的对接及业务,梳理下其中的点,有需要的⼩伙伴可以参考下。
⽤户在微信客户端中访问第三⽅⽹页,公众号可以通过微信⽹页授权机制,来获取⽤户基本信息,进⽽实现业务逻辑。
关于⽹页授权回调域名的说明3、如果公众号登录授权给了第三⽅开发者来进⾏管理,则不必做任何设置,由第三⽅代替公众号实现⽹页授权即可。
关于⽹页授权的两种scope的区别说明1、以snsapi_base为scope发起的⽹页授权,是⽤来获取进⼊页⾯的⽤户的openid的,并且是静默授权并⾃动跳转到回调页⾯的。
⽤户感知的就是直接进⼊了回调页⾯(配置在⾃定义菜单中的⼀长串地址中redirect_uri 对应的回调⽅法)2、以snsapi_userinfo为scope发起的⽹页授权,是⽤来获取⽤户的基本信息的。
但这种授权需要⽤户⼿动同意,并且由于⽤户同意过,所以⽆须关注,就可在授权后获取该⽤户的基本信息,下图为⼿动授权的参考:scope等于snsapi_userinfo时的授权页⾯。
3、⽤户管理类接⼝中的“获取⽤户基本信息接⼝”,是在⽤户和公众号产⽣消息交互或关注后事件推送后,才能根据⽤户OpenID来获取⽤户基本信息。
这个接⼝,包括其他微信接⼝,都是需要该⽤户(即openid)关注了公众号后,才能调⽤成功的。
关于UnionID机制1、请注意,⽹页授权获取⽤户基本信息也遵循UnionID机制。
即如果开发者有在多个公众号,或在公众号、移动应⽤之间统⼀⽤户帐号的需求,需要前往微信开放平台()绑定公众号后,才可利⽤UnionID机制来满⾜上述需求。
2、UnionID机制的作⽤说明:如果开发者拥有多个移动应⽤、⽹站应⽤和公众帐号,可通过获取⽤户基本信息中的unionid来区分⽤户的唯⼀性,因为同⼀⽤户,对同⼀个微信开放平台下的不同应⽤(移动应⽤、⽹站应⽤和公众帐号),unionid是相同的。
微信公众平台asp接口
微信公众平台Asp文件编写易伟接口验证文件<%response.write request("echostr")%>测试是否正常文件<%@Language="VBScript" CodePage="65001"%><%dim ToUserNamedim FromUserNameset xml_dom = Server.CreateObject("MSXML2.DOMDocument")xml_dom.load requestToUserName=xml_dom.getelementsbytagname("ToUserName").item(0).tex tFromUserName=xml_dom.getelementsbytagname("FromUserName").item(0) .textstrresponse="<xml>" &_"<ToUserName><![CDATA["&fromusername&"]]></ToUserName>" &_ "<FromUserName><![CDATA["&tousername&"]]></FromUserName>" &_ "<CreateTime>"&now&"</CreateTime>" &_"<MsgType><![CDATA[text]]></MsgType>" &_"<Content><![CDATA[你好]]></Content>" &_"<FuncFlag>0<FuncFlag>" &_"</xml>"response.write strresponse%>全部地理位置、图片、关注、关键词事件见下页<%@Language="VBScript" CodePage="65001"%><%dim ToUserNamedim FromUserNameset xml_dom = Server.CreateObject("MSXML2.DOMDocument")xml_dom.load requestToUserName=xml_dom.getelementsbytagname("ToUserName").item(0).tex tFromUserName=xml_dom.getelementsbytagname("FromUserName").item(0) .textMsgType=xml_dom.getelementsbytagname("MsgType").item(0).textselect case MsgTypecase "event"contentStr = "感谢你关注XXX"case "image"contentStr = "你的图片很棒"case "location"Location_X=xml_dom.getelementsbytagname("Location_X").item(0).tex tLocation_Y=xml_dom.getelementsbytagname("Location_Y").item(0).tex tcontentStr = "你的位置是经度"&Location_X&"纬度"&Location_Ycase "text"Content=xml_dom.getelementsbytagname("Content").item(0).text Keyword=trim(Content)select case Keywordcase "1"contentStr = "公司简介"case "2"contentStr = "最新优惠"end selectend selectstrresponse="<xml>" &_"<ToUserName><![CDATA["&fromusername&"]]></ToUserName>" &_ "<FromUserName><![CDATA["&tousername&"]]></FromUserName>" &_ "<CreateTime>"&now&"</CreateTime>" &_"<MsgType><![CDATA[text]]></MsgType>" &_"<Content><![CDATA["&contentStr&"]]></Content>" &_"<FuncFlag>0<FuncFlag>" &_"</xml>"response.write strresponse%>。
微信网页授权并获取用户信息的方法
微信⽹页授权并获取⽤户信息的⽅法介绍在很多微信H5应⽤⾥,当⽤户访问第三⽅应⽤时就需要进⾏微信⽹页授权,并且很多涉及安全的操作我们必须要先获取⽤户信息才能继续,本⽂章简单介绍了微信授权流程,并通过申请微信测试账号来模拟⽹页授权,⽤户在授权页点击确定登录后获取⽤户信息并显⽰在前端页⾯,最后效果如下图⼯具及开发准备1. 微信开发者⼯具及微信测试号因为是微信授权,所以必须要在微信环境下使⽤,⾸先我们要在安装微信开发者⼯具,因为我们没有⾃⼰的应⽤,所以还需要在申请⼀个接⼝测试号,这个接⼝测试号就相当于我们的第三⽅应⽤。
2. 参数设置登陆测试号后可以查看到⾃⼰的appId和appsecret信息,将体验接⼝权限表⾥的⽹页服务的⽹页授权获取⽤户基本信息修改为127.0.0.1:8800,该地址就是⽤户确认授权后回调的地址即我们应⽤的后台处理地址,如下图最后拿出⾃⼰微信扫码关注该测试号即可,如下图所⽰微信授权流程介绍具体流程及详细介绍⼤家可以到官⽹查看,⼤致分为四步:1. 引导⽤户进⼊授权页⾯同意授权,此时会调⽤微信api获取code2. 授权通过后会带上code参数请求回调地址3. 后台获取code,再次调⽤微信接⼝换取⽹页授权access_token和openid4. 通过⽹页授权access_token和openid获取⽤户基本信息(如果有unionid还会获取到unionid参数)正式开始1. 原始代码let express = require("express");const https = require('https');let app = express();//appIDletappID = `wxec6fa9e9bc03d885`;//appsecretletappSerect = `4c8a0d14cff08959b4e17334cabf9cf0`;//点击授权后重定向url地址let redirectUrl = `/getUserInfo`;let host = `http://127.0.0.1:3000`;//微信授权api,接⼝返回code,点击授权后跳转到重定向地址并带上code参数let authorizeUrl = `https:///connect/oauth2/authorize?appid=${appID}&redirect_uri=` + `${host}${redirectUrl}&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect` app.get("/login", function(req, res) {res.sendFile(path.resolve(__dirname,'login.html'));});app.get("/auth", function(req, res) {res.writeHead(302, {'Location': authorizeUrl});res.end();});app.get("/getUserInfo", function(req, res) {let code = req.query.code;let getaccess = `https:///sns/oauth2/access_token?appid=` + `${appID}&secret=${appSerect}&code=$[code]&grant_type=authorization_code`;//通过拿到的code和appID、app_serect获取access_token和open_idhttps.get(getaccess, (resText) => {var ddd = "";resText.on('data', (d) => {ddd += d;});resText.on('end', () => {// console.log(ddd);var obj = JSON.parse(ddd);var access_token = obj.access_token;var open_id = obj.openid;//通过上⼀步获取的access_token和open_id获取userInfo即⽤户信息let getUserUrl = `https:///sns/userinfo?access_token=${access_token}&openid=${open_id}⟨=zh_CN`;https.get(getUserUrl, (resText) => {user = "";resText.on('data', (d) => {user += d;});resText.on('end', () => {console.log(user);var userobj = JSON.parse(user);res.send(userobj);console.log(userobj);});}) });}).on('error', (e) => {console.error(e);});app.listen(3000);具体使⽤时要将appID和appSerect换成你对应的参数即可,因为我们的请求是要按⼀定顺序的,但是node发送请求是异步的,所以我们的请求嵌套了三层,代码很难看,所以这⾥可以采⽤ES6的async和await解决异步回调地狱。
啊Ran讲微信开发(.net):公众号(服务号)+自定义服务器(OAuth授权登录)
啊Ran讲微信开发(.net):公众号(服务号)+⾃定义服务器(OAuth授权登录)上⼀篇我们探讨到⾃定义菜单key为view带有⼀个"url"参数的点击事件,这边我们就聊聊"微信授权登录".1.⽹页授权接⼝⽹页授权接⼝允许微信公众号的第三⽅⽹页获取微信个⼈⽤户的基本信息,包括昵称,头像,性别,城市,国家,注册时间等.利⽤微信个⼈⽤户的基本信息,可以实现体验优化,⽤户来源统计,账号绑定,⽤户⾝份鉴权等功能.OAuth协议为⽤户资源的授权提供了⼀个安全的,开放⽽简易的标准,与以往的授权⽅式不同之处是OAuth的授权不会使第三⽅触及到⽤户的账户信息(如⽤户信息和密码),即第三⽅⽆须使⽤⽤户的⽤户名和密码就可以申请获得该⽤户资源的授权,因此OAuth是安全的.如果⽤户在微信客户端中访问第三⽅⽹页,则公众号可以通过微信⽹页授权机制来获取⽤户基本信息,进⽽实现业务逻辑.获取⽤户基本信息接⼝是在⽤户和公众号产⽣消息交互时,才能根据⽤户OpenId获取⽤户的基本信息,⽽通过⽹页授权的⽅式获取⽤户基本信息,则⽆需消息交互,只要微信个⼈⽤户进⼊到微信公众号的⽹页,就会弹出请求⽤户授权的界⾯,⽤户授权之后,就可以获取基本信息,此过程甚⾄不需要⽤户已经关注公众号.2.服务号的回调域名设置⽤户在⽹页授权页同意授权给公众号后,微信会将授权数据传给⼀个回调页⾯,回调页⾯所在的域名都需要在微信公众管理后台进⾏登记,以确保安全可靠,所以在微信公众请求⽤户⽹页授权之前,开发者需要先到公众平台官⽹中的开发者中页⾯配置授权回调域名.注意:订阅号时没有此功能的,服务号才有.3.公众号的授权⽅式公众号的⽹页授权有两种⽅式,⼀种是以snsapi_base为scope发起的⽹页授权,是⽤来获取进⼊页⾯的⽤户的openid的,在获取到⽤户的openid后,调⽤获取⽤户基本信息接⼝,获取⽤户的详细信息.此种⽅式是静默授权并且⾃动跳转到回调页⾯,给⽤户的感觉就是直接进⼊可想进的页⾯,但弊端是,如果⽤户并没有关注该公众号,则是⽆法使⽤"获取⽤户基本信息"接⼝的.另⼀种是以snsapi_userinfo为scope发起的⽹页授权,是⽤来获取⽤户的基本信息,但这种授权在当⽤户单击授权连接后,会跳转到⼀个询问⽤户是否同意的页⾯.由于这种⽅式已经⽤户同意,所以⽆需关注,就可以在授权后获取该⽤户的基本信息,并且,对于关注公众号的⽤户,如果⽤户从公众号的会话或者⾃定义菜单进⼊本公众号的⽹页授权页,即使是scope为snsapi_userinfo,也是静默授权,⽤户⽆感知.4.⽹页授权access_token和access_token的区别5.授权步骤6.代码实现///<summary>///获取微信Code///</summary>///<param name="appId">appid</param>///<param name="appSecret">密匙</param>///<param name="redirectUrl">回调页⾯</param>public string GetWeiXinCode(string appId, string appSecret, string redirectUrl){Random r = new Random();//微信登录授权//string url = "https:///connect/qrconnect?appid=" + appId + "&redirect_uri=" + redirectUrl +"&response_type=code&scope=snsapi_login&state=STATE#wechat_redirect";//微信OpenId授权//string url = "https:///connect/oauth2/authorize?appid=" + appId + "&redirect_uri=" + redirectUrl +"&response_type=code&scope=snsapi_login&state=STATE#wechat_redirect"; //微信⽤户信息授权string url = "https:///connect/oauth2/authorize?appid=" + appId + "&redirect_uri=" + redirectUrl + "&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect";return url;}///<summary>///通过code获取access_token///</summary>///<param name="appId"></param>///<param name="appSecret"></param>///<param name="code"></param>///<returns></returns>public WeiXinAccessTokenResult GetWeiXinAccessToken(string appId, string appSecret, string code){string url = "https:///sns/oauth2/access_token?appid=" + appId + "&secret=" + appSecret +"&code=" + code + "&grant_type=authorization_code";string jsonStr = Tools.GetHttpRequest(url);//发起请求WeiXinAccessTokenResult result = new WeiXinAccessTokenResult();if (jsonStr.Contains("errcode")){WeiXinErrorMsg errorResult = new WeiXinErrorMsg();errorResult = JsonHelper.ParseFromJson<WeiXinErrorMsg>(jsonStr);result.ErrorResult = errorResult;result.Result = false;}else{WeiXinAccessTokenModel model = new WeiXinAccessTokenModel();model = JsonHelper.ParseFromJson<WeiXinAccessTokenModel>(jsonStr);//序列化result.SuccessResult = model;result.Result = true;}return result;}///<summary>///刷新获取access_token///</summary>///<param name="appId"></param>///<param name="appSecret"></param>///<param name="code"></param>///<returns></returns>public WeiXinAccessTokenResult GetWeiXinRefreshAccessToken(string appId, string refresh_token){string url = "https:///sns/oauth2/refresh_token?appid=" + appId +"&grant_type=refresh_token&refresh_token=" + refresh_token;string jsonStr = Tools.GetHttpRequest(url);WeiXinAccessTokenResult result = new WeiXinAccessTokenResult();if (jsonStr.Contains("errcode")){WeiXinErrorMsg errorResult = new WeiXinErrorMsg();errorResult = JsonHelper.ParseFromJson<WeiXinErrorMsg>(jsonStr);result.ErrorResult = errorResult;result.Result = false;}else{WeiXinAccessTokenModel model = new WeiXinAccessTokenModel();model = JsonHelper.ParseFromJson<WeiXinAccessTokenModel>(jsonStr);result.SuccessResult = model;result.Result = true;}return result;}注意,使⽤此接⼝是⽆法获取⽤户是否关注及关注时间.///<summary>///拉取⽤户信息///</summary>///<param name="accessToken"></param>///<param name="openId"></param>///<returns></returns>public WeiXinUserInfoResult GetWeiXinUserInfo(string accessToken, string openId){string url = "https:///sns/userinfo?access_token=" + accessToken + "&openid=" + openId + "&lang=zh_CN";string jsonStr = Tools.GetHttpRequest(url);WeiXinUserInfoResult result = new WeiXinUserInfoResult();if (jsonStr.Contains("errcode")){WeiXinErrorMsg errorResult = new WeiXinErrorMsg();errorResult = JsonHelper.ParseFromJson<WeiXinErrorMsg>(jsonStr);result.ErrorMsg = errorResult;result.Result = false;}else{WeiXinUserInfo userInfo = new WeiXinUserInfo();userInfo = JsonHelper.ParseFromJson<WeiXinUserInfo>(jsonStr);erInfo = userInfo;result.Result = true;}return result;}集成到pageBase.cs⽗类页⾯public partial class BasePage : System.Web.UI.Page{public BasePage(){this.Page.Load += new EventHandler(Page_Load);this.Page.Unload += new EventHandler(Page_UnLoad);}protected void Page_Load(object sender, EventArgs e){DoWith();}protected void Page_UnLoad(object sender, EventArgs e){}private void DoWith(){//获取appId,appSecret的配置信息string appId = System.Configuration.ConfigurationSettings.AppSettings["appid"];string appSecret = System.Configuration.ConfigurationSettings.AppSettings["secret"];WeiXinOAuth weixinOAuth = new WeiXinOAuth();string _code = Request["code"];string _state = Request["state"];if (_code == "" || _code == "authdeny"){if (_code == ""){string _authUrl = weixinOAuth.GetWeiXinCode(appId, appSecret, HttpContext.Current.Server.UrlEncode(HttpContext.Current.Request.Url.ToString())); HttpContext.Current.Response.Redirect(_authUrl, true);}else{ // ⽤户取消授权HttpContext.Current.Response.Redirect("~/Error.html", true);}}else{WeiXinAccessTokenResult modelResult = weixinOAuth.GetWeiXinAccessToken(appId, appSecret, _code);WeiXinUserInfoResult _userInfo = weixinOAuth.GetWeiXinUserInfo(modelResult.SuccessResult.access_token, modelResult.SuccessResult.openid);//⽤户信息(判断是否已经获取到⽤户的微信⽤户信息)if (_userInfo.Result && _erInfo.openid != ""){//保存获取到的⽤户微信⽤户信息,并保存到数据库中}else{//GameTradingByPublic.ExceptionLog.writeFile(2, "获取⽤户OpenId失败");}}}}View Code。
微信公众平台开发教程
公众平台开发教程公众平台开发教程1.序言- 介绍公众平台开发的概念和意义2.开发前准备2.1 注册与认证- 注册公众平台账号的步骤和注意事项 - 公众号认证的流程和要求2.2 获取开发者凭据- 创建开发者账号- 获取AppID和AppSecret2.3 安装开发环境- 并安装开发所需的软件和工具- 配置开发环境3.公众号基础功能开发3.1 接入与配置- 接入公众平台- 配置服务器- 验证服务器有效性3.2 自动回复消息- 文本消息的回复- 图文消息的回复- 语音、图片、视频消息的回复 3.3 菜单开发- 创建自定义菜单- 菜单事件处理- 菜单跳转处理3.4 用户管理- 获取用户基本信息- 获取用户列表- 用户标签管理4.高级功能开发4.1 网页授权- 用户同意授权获取code- 通过code获取access_token - 获取用户信息4.3 支付- 统一下单- 支付结果通知- 退款申请与处理4.4 素材管理- 临时素材- 获取临时素材- 永久素材- 获取永久素材5.安全与管理5.1 防止误触发- 防止消息回复产生无限循环 - 防止菜单跳转无效访问5.2 安全编码实践- 防止恶意请求- 数据加密与解密- 防范XSS攻击和SQL注入5.3 运维和监控- 错误日志的监控与处理- 系统运行状态监测- 用户行为分析和优化6.附件- 附带相关代码示例、Demo文件等供参考使用7.法律名词及注释- 在本文档中涉及的法律名词和相关注释。