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(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()); } }
至于需要的接口就去微信公众平台开发者文档中去查看啦。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。