微信公众号支付-Common

复制代码
using System.Web;
/// <summary>
/// 公共帮助类
/// </summary>
public class Common {

    private HttpContext Context { get; set; }
    public static string OpenId = "Openid";
    public static string access_token = "access_token";

    #region 构造函数
    /// <summary>
    /// 构造函数
    /// </summary>
    /// <param name="Context"></param>
    public Common(HttpContext context)
    {
        this.Context = context;
    }
    #endregion


    #region 通过code换取AccessToken
    /// <summary>
    /// 通过code换取AccessToken
    /// </summary>
    public void GetOpenidAndAccessToken()
    {
        if (!string.IsNullOrEmpty(Context.Request.QueryString["code"]))
        {
            //获取code码,以获取openid和access_token
            string code = Context.Request.QueryString["code"];
            GetOpenidAndAccessTokenFromCode(code);
        }
        else
        {
            //构造网页授权获取code的URL
            string host = Context.Request.Url.Host;
            string path = Context.Request.Path;
            string redirect_uri = HttpUtility.UrlEncode("http://" + host + path);


            WxPayData data = new WxPayData();
            data.SetValue("appid",

WxPayConfig.APPID);
            data.SetValue("redirect_uri", redirect_uri);
            data.SetValue("response_type", "code");
            data.SetValue("scope", "snsapi_base");
            data.SetValue("state", "STATE" + "#wechat_redirect");
            string url = "https://open.weixin.qq.com/connect/oauth2/authorize?" + data.ToUrl();
            try
            {
                //触发微信返回code码         
                Context.Response.Redirect(url);//Redirect函数会抛出ThreadAbortException异常,不用处理这个异常
            }
            catch (System.Threading.ThreadAbortException ex)
            {
            }
        }
    }

    #endregion

    #region 通过用户授权获取AccessToken和OpenId
    /// <summary>
    /// 通过用户授权获取AccessToken和OpenId
    /// </summary>
    /// <param name="code"></param>
    public void GetOpenidAndAccessTokenFromCode(string code)
    {
        try
        {
            //构造获取openid及access_token的url
            WxPayData data = new WxPayData();
            data.SetValue("appid",

WxPayConfig.APPID);
            data.SetValue("secret",

WxPayConfig.APPSECRET);
            data.SetValue("code",

code);
            data.SetValue("grant_type", "authorization_code");
            string url = "https://api.weixin.qq.com/sns/oauth2/access_token?" + data.ToUrl();

            //请求url以获取数据
            string result = HttpService.Get(url);

            //保存access_token,用于收货地址获取
            JsonData jd = JsonMapper.ToObject(result);
            access_token = (string)jd["access_token"];

            //获取用户openid
            OpenId = (string)jd["openid"];
        }
        catch (Exception ex)
        {
            throw new WxPayException(ex.ToString());
        }
    }
    #endregion

    #region 获取OpenId
    /// <summary>
    /// 获取OpenId
    /// </summary>
    /// <param name="postStr"></param>
    /// <returns></returns>
    public string GetOpenId()
    {
        Common common = new Common(Context);
        common.GetOpenidAndAccessToken();
        return OpenId;
    }
    #endregion



}
复制代码

 

posted @   韩梦芫  阅读(235)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
历史上的今天:
2014-08-29 C# Login方法
点击右上角即可分享
微信分享提示