C#调用微信接口的相关代码
发布时间 - 2026-01-11 02:08:53 点击率:次调用微信接口前需要准备的内容。

1.微信公众平台的appid
2.微信公众平台的secret
3..获取tokenid
4.获取ticket
5.生成签名的随机串
6.生成签名的时间戳
7.生成签名
具体内容:
1.微信公众平台的appid
2.微信公众平台的secret
这两者需要登录到申请的微信公众平台中去获取,建议写在配置文件中
3.获取tokenid
public static string GetWxTokenId()
{
string token = "";
string url = string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", appid, secret);
//向上面的地址发起httpget请求
//这里是封装的一个http请求的类
string content = HttpHelper.HttpGet(url);
if (!string.IsNullOrEmpty(content))
{
var obj = JsonConvert.DeserializeObject<TokenResult>(content);
if (!obj.errcode.HasValue)
{
token = obj.access_token;
}
}
return token;
}
这里是获取微信tokenid的返回对象
private class TokenResult
{
public string access_token { get; set; }
public string expires_in { get; set; }
public int? errcode { get; set; }
public string errmsg { get; set; }
}
注意:在每个微信公众号中获取tokenid的次数是有限的,所以应该将获取到的tokenid储存起来,以便后续使用。我使用的方法是将tokenid存储在数据库中,所以在每次使用之前都要做判断处理
/*tokenid保存方式说明:
*可在数据库中创建表:SysConfig(用户存储项目中的配置数据)
* 字段:
* ConfigKey:用于查询该条数据的key,做为主键
* ConfigValue:存储数据的值
* TypeName:该条配置数据的名称
* Description:说明
* CreateTime:创建时间
* LastModifyTime:上次修改的时间
* AllowEdit:是否可编辑
* LastValue:上一次的值
* tokenid的有效时间是两个小时=7200秒,每重新获取一次就更新一次LastModifyTime的值,将LastModifyTime和当前时间进行比对,如果小于7200秒则可以不用再次获取,反之则需要再次从微信获取。
*/
===================================================================================================
4.获取ticket。需要上一步中获取到的tokenid。
/// <summary>
/// 获取ticket
/// </summary>
/// <param name="token">获取到的tokenid</param>
/// <returns>strticket</returns>
public static string GetTicket(string token)
{
string getticketurl = string.Format("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={0}&type=jsapi", token);
string content = HttpHelper.HttpGet(getticketurl);
JsApiTicket obj = JsonConvert.DeserializeObject<JsApiTicket>(content);
return obj.ticket;
}
5.生成签名的随机串
//生成签名的随机串
string noncestr = Guid.NewGuid().ToString().Replace("-", "");
6.生成签名的时间戳
TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0); string timestamp = Convert.ToInt64(ts.TotalSeconds).ToString();
7.生成签名
string signature = MakeSha1Sign(string.Format("jsapi_ticket={0}&noncestr={1}×tamp={2}&url={3}", jsapi_ticket, noncestr, timestamp, url));
/// <summary>
/// SDK生成签名
/// 注意:需要引用System.Security.dll
/// </summary>
/// <param name="str"></param>
/// <returns>str签名</returns>
public static string MakeSha1Sign(string str)
{
byte[] StrRes = Encoding.Default.GetBytes(str);
HashAlgorithm iSHA = new SHA1CryptoServiceProvider();
StrRes = iSHA.ComputeHash(StrRes);
StringBuilder EnText = new StringBuilder();
foreach (byte iByte in StrRes)
{
EnText.AppendFormat("{0:x2}", iByte);
}
return EnText.ToString();
}
最后可以将这些步骤封装在一个方法中
/// <summary>
/// 获取调用微信接口用的SDKConfig
/// </summary>
/// <param name="url"></param>
/// <returns>SDKConfig整个对象</returns>
public static JsApiConfig GetJsSdkConfig(string url)
{
//获取tokenid
string access_token = GetWxTokenId();
//获取ticket
string jsapi_ticket = GetTicket(access_token);
//生成签名的随机串
string noncestr = Guid.NewGuid().ToString().Replace("-", "");
//生成签名的时间戳
TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
string timestamp = Convert.ToInt64(ts.TotalSeconds).ToString();
//签名
string signature = MakeSha1Sign(string.Format("jsapi_ticket={0}&noncestr={1}×tamp={2}&url={3}", jsapi_ticket, noncestr, timestamp, url));
JsApiConfig config = new JsApiConfig()
{
appId = appid,
debug = false,
nonceStr = noncestr,
timestamp = timestamp,
signature = signature,
ticket = jsapi_ticket,
//需要使用的JS接口列表
jsApiList = new string[] { "chooseImage", "previewImage", "uploadImage", "downloadImage" }
};
return config;
}
页面上面调用我们上面配置好的内容
$.post('/WapCardInfo/GetSDKConfig', { url: location.href.split('#')[0] }, function (data) {
var configObj = data;
wx.config({
debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: configObj.appId, // 必填,公众号的唯一标识
timestamp: configObj.timestamp, // 必填,生成签名的时间戳
nonceStr: configObj.nonceStr, // 必填,生成签名的随机串
signature: configObj.signature, // 必填,签名,见附录1
jsApiList: [
'checkJsApi',
'onMenuShareTimeline',
'onMenuShareAppMessage',
'onMenuShareQQ',
'onMenuShareWeibo',
'onMenuShareQZone'
] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
});
});
请求的后台代码
[HttpPost]
public JsonResult GetSDKConfig(string url)
{
try
{
//这里就是调用上面封装的方法
JsSdkApi.jsapiConfig model = JsSdkApi.GetJsSdkConfig(url);
return Json(model);
}
catch (Exception ex)
{
LogHelper.Error("获取wxconfig出现异常:" + ex.Message.Replace("'", "\""));
return Json(new JsSdkApi.jsapiConfig());
}
}
至于需要的接口就去微信公众平台开发者文档中去查看啦。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# C#
# 微信接口
# C#开发微信门户及应用(1) 微信接口使用
# C#微信开发之获取接口调用凭据
# C#微信公众号与订阅号接口开发示例代码
# C#.net 微信公众账号接口开发
# C#微信公众平台开发之高级群发接口
# C#开发微信公众号接口开发
# c#使用微信接口开发微信门户应用中微信消息的处理和应答
# c#使用微信接口开发微信门户应用
# C#微信开发之发送模板消息
# C#微信接口之推送模板消息功能示例
# 必填
# 中去
# 数据库中
# 见附录
# 会在
# 要做
# 可在
# 就去
# 就更
# 则可
# 写在
# 时才
# 若要
# 装在
# 具体内容
# 配置文件
# 要再
# 大家多多
# 比对
# 这两者
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】
Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)
Android利用动画实现背景逐渐变暗
android nfc常用标签读取总结
php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】
个人网站制作流程图片大全,个人网站如何注销?
Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】
如何快速生成高效建站系统源代码?
JS碰撞运动实现方法详解
JS经典正则表达式笔试题汇总
做企业网站制作流程,企业网站制作基本流程有哪些?
Linux系统命令中tree命令详解
Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践
,怎么在广州志愿者网站注册?
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
如何快速搭建高效简练网站?
如何在橙子建站上传落地页?操作指南详解
Laravel Seeder填充数据教程_Laravel模型工厂Factory使用
Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】
长沙企业网站制作哪家好,长沙水业集团官方网站?
Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】
今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】
Laravel如何与Inertia.js和Vue/React构建现代单页应用
Laravel观察者模式如何使用_Laravel Model Observer配置
Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
Windows10如何更改计算机工作组_Win10系统属性修改Workgroup
Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南
如何在橙子建站中快速调整背景颜色?
Laravel怎么使用Intervention Image库处理图片上传和缩放
网站制作价目表怎么做,珍爱网婚介费用多少?
如何在腾讯云免费申请建站?
Claude怎样写结构化提示词_Claude结构化提示词写法【教程】
网易LOFTER官网链接 老福特网页版登录地址
javascript事件捕获机制【深入分析IE和DOM中的事件模型】
微信小程序 闭包写法详细介绍
Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能
如何在建站宝盒中设置产品搜索功能?
jQuery中的100个技巧汇总
Laravel中的withCount方法怎么高效统计关联模型数量
lovemo网页版地址 lovemo官网手机登录
Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】
如何快速搭建二级域名独立网站?
打开php文件提示内存不足_怎么调整php内存限制【解决方案】
Python结构化数据采集_字段抽取解析【教程】
*服务器网站为何频现安全漏洞?
Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】
Laravel如何实现API版本控制_Laravel API版本化路由设计策略

