C# 关于调用微信接口的代码
调用微信接口前需要准备的内容。
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(, , , , , , );
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(, , , , , , );
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('#')[] }, 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.微信公众平台的appid 2.微信公众平台的secret 3..获取tokenid 4.获取ticket 5.生成签名的随机串 6.生成签名的时间戳 7.生成签名 ...
- C# 调用微信接口上传素材和发送图文消息
using Common;using Newtonsoft.Json.Linq;using System;using System.IO;using System.Net;using System.T ...
- 调用微信接口token的问题
前言 微信的影响力众所周知,越来越多的人也都离不开它,工作,生活,社交的好帮手.相信大家对微信公众号,小程序也都不陌生,那么在开发公众号,小程序的时候需要调用到微信的接口,固然就会遇到token的问题 ...
- JAVA调用微信接口实现页面分享功能(分享到朋友圈显示图片,分享给朋友)
钉钉提供的内网穿透之HTTP穿透:https://www.cnblogs.com/pxblog/p/13862376.html 网页分享到微信中如何显示标题图,如果自定义标题图,描述,显示效果如下 官 ...
- vue项目中分享到朋友圈,调用微信接口
虽然微信提供了jssdk,不代表可以点击按钮进行分享到朋友圈,是需要微信自带的浏览器右上角进行分享.手机浏览器需要浏览器支持分享到朋友圈的分享机制. 微信jssdk地址: https://mp.wei ...
- HTML5 页面调用微信接口
参考微信微信官方文档JS_SDK:https://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html#JSSDK.E4.BD.B ...
- [实例]JAVA调用微信接口发送图文消息,不用跳到详情页
package com.test; import java.io.IOException; import java.io.InputStream; import java.io.OutputStrea ...
- 前台调用微信接口成功还报Network Error
前台 vue+springboot项目 this.api({ url:"https://.....",//微信路径 method:"post", param ...
- 调用 微信接口报错 {"errcode":48001,"errmsg":"api unauthorized, hints: [ req_id: 1QoCla0699ns81 ]"}
如下截图,仅为备份,本文转载地址: http://www.cnblogs.com/liaolongjun/p/6080240.html 以下正文↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ ...
随机推荐
- ios::sync_with_stdio(false)提高C++读写速度
版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:ios::sync_with_stdio(false)提高C++读写速度 本文地址:h ...
- vue服务端渲染axios预取数据
首先是要参考vue服务端渲染教程:https://ssr.vuejs.org/zh/data.html. 本文主要代码均参考教程得来.基本原理如下,拷贝的原文教程. 为了解决这个问题,获取的数据需要位 ...
- 【Mysql】- Mysql 8.0正式版新亮点
MySQL 8.0 正式版 8.0.11 已发布,官方表示 MySQL 8 要比 MySQL 5.7 快 2 倍,还带来了大量的改进和更快的性能! 注意:从 MySQL 5.7 升级到 MySQL 8 ...
- django设置首页
1.在views中添加一个def 为homepage basepath=os.getcwd()+'\\dockerApp\\app\\templates\\';def homepage(request ...
- Tiny4412 LED 程序
package cn.hyc.led; import android.os.Bundle; import android.app.Activity; import android.view.Menu; ...
- 在windows搭建react
1.安装必须的软件 1.Python 2 注意勾选 Add python.exe to Path,选项,这样就可以在安装完成后,不用手动去添加环境变量 安装完,打开cmd.exe,输入py ...
- BZOJ2820:YY的GCD——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=2820 Description 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x& ...
- BZOJ2152:聪聪可可——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=2152 Description 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一 ...
- java使用POI操作XWPFDocument中的XWPFParagraph(段落)对象的属性略解
我用的是office word 2016版 创建文本对象 XWPFDocument docxDocument = new XWPFDocument(); 创建段落对象 XWPFParagraph pa ...
- Linux环境下用Weblogic发布项目【三】 -- 启动、登陆、停止WebLogic
一.启动WebLogic: 1.启动前,修改访问端口.IP地址方法: 在config.xml中修改,具体路径如下: /root/Oracle/Middleware/user_projects/doma ...