2025-04-21 14:10:27 +08:00

116 lines
5.2 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web;
using System.Web.Script.Serialization;
namespace MyCode.Project.Infrastructure.Common
{
//微信推广支持接口开发
public class QrCodeApi
{
public static string SessionAccessToken = "";//access_token缓存 其他接口的通行证
JavaScriptSerializer Jss = new JavaScriptSerializer();
#region /
/// <summary>
/// 调用微信接口获取带参数临时二维码的ticket
/// 使用方法https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=TICKET
/// </summary>
/// <param name="scene_id">二维码带的参数</param>
/// <returns>json:ticket:换取二维码的凭证expire_seconds:凭证有效时间url:二维码解析后的地址。此处返回ticket 否则返回错误码</returns>
public string GetQrcode(string appid, string appsecret, Int32 scene_id)
{
string QrcodeUrl = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token={0}";//WxQrcodeAPI接口
string AccessToken = GetAccessToken(appid, appsecret);//拉取AccessToken
QrcodeUrl = string.Format(QrcodeUrl, AccessToken);
string PostJson = "{\"expire_seconds\": 1800, \"action_name\": \"QR_SCENE\", \"action_info\": {\"scene\": {\"scene_id\": " + scene_id + "}}}";
string ReText = CommonMethod.WebRequestPostOrGet(QrcodeUrl, PostJson);//post提交
Dictionary<string, object> reDic = (Dictionary<string, object>)Jss.DeserializeObject(ReText);
if (reDic.ContainsKey("ticket"))
{
return reDic["ticket"].ToString();//成功
}
else
{
return reDic["errcode"].ToString();//返回错误码
}
}
/// <summary>
/// 调用微信接口获取带参数永久二维码的ticket
/// 使用方法https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=TICKET
/// </summary>
/// <param name="scene_id">二维码带的参数</param>
/// <returns>json:ticket:换取二维码的凭证expire_seconds:凭证有效时间url:二维码解析后的地址。此处返回ticket 否则返回错误码</returns>
public string GetQrcode(string appid, string appsecret, string scene_str)
{
string QrcodeUrl = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token={0}";//WxQrcodeAPI接口
string AccessToken = GetAccessToken(appid, appsecret);//拉取AccessToken
QrcodeUrl = string.Format(QrcodeUrl, AccessToken);
string PostJson = "{\"expire_seconds\": 1800, \"action_name\": \"QR_LIMIT_STR_SCENE\", \"action_info\": {\"scene\": {\"scene_str\": " + scene_str + "}}}";
string ReText = CommonMethod.WebRequestPostOrGet(QrcodeUrl, PostJson);//此处省略了 WebRequestPostOrGet即为WebHttpRequest发送Post请求
Dictionary<string, object> reDic = (Dictionary<string, object>)Jss.DeserializeObject(ReText);
if (reDic.ContainsKey("ticket"))
{
return reDic["ticket"].ToString();//成功
}
else
{
return reDic["errcode"].ToString();//返回错误码
}
}
#endregion
#region access_token缓存
public static string GetTokenSession(string AppID, string AppSecret)
{
string TokenSession = "";
if (System.Web.HttpContext.Current.Session[SessionAccessToken] == null)
{
TokenSession = AddTokenSession(AppID, AppSecret);
}
else
{
TokenSession = System.Web.HttpContext.Current.Session[SessionAccessToken].ToString();
}
return TokenSession;
}
/// <summary>
/// 添加AccessToken缓存
/// </summary>
/// <param name="AppID"></param>
/// <param name="AppSecret"></param>
/// <returns></returns>
public static string AddTokenSession(string AppID, string AppSecret)
{
//获取AccessToken
string AccessToken = GetAccessToken(AppID, AppSecret);
HttpContext.Current.Session[SessionAccessToken] = AccessToken;
HttpContext.Current.Session.Timeout = 7200;
return AccessToken;
}
/// <summary>
/// 获取AccessToken
/// </summary>
/// <param name="AppID"></param>
/// <param name="AppSecret"></param>
/// <returns></returns>
public static string GetAccessToken(string AppID, string AppSecret)
{
JavaScriptSerializer Jss = new JavaScriptSerializer();
string respText = CommonMethod.WebRequestPostOrGet(string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", AppID, AppSecret), "");
Dictionary<string, object> respDic = (Dictionary<string, object>)Jss.DeserializeObject(respText);
string accessToken = respDic["access_token"].ToString();
return accessToken;
}
#endregion
}
}