C#调用微信接口的相关代码
调用微信接口前需要准备的内容。
1.微信公众平台的appid
2.微信公众平台的secret
3..获取tokenid
4.获取ticket
5.生成签名的随机串
6.生成签名的时间戳
7.生成签名
具体内容:
1.微信公众平台的appid
2.微信公众平台的secret
这两者需要登录到申请的微信公众平台中去获取,建议写在配置文件中
3.获取tokenid
publicstaticstringGetWxTokenId()
{
stringtoken="";
stringurl=string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}",appid,secret);
//向上面的地址发起httpget请求
//这里是封装的一个http请求的类
stringcontent=HttpHelper.HttpGet(url);
if(!string.IsNullOrEmpty(content))
{
varobj=JsonConvert.DeserializeObject(content);
if(!obj.errcode.HasValue)
{
token=obj.access_token;
}
}
returntoken;
}
这里是获取微信tokenid的返回对象
privateclassTokenResult
{
publicstringaccess_token{get;set;}
publicstringexpires_in{get;set;}
publicint?errcode{get;set;}
publicstringerrmsg{get;set;}
}
注意:在每个微信公众号中获取tokenid的次数是有限的,所以应该将获取到的tokenid储存起来,以便后续使用。我使用的方法是将tokenid存储在数据库中,所以在每次使用之前都要做判断处理
/*tokenid保存方式说明:
*可在数据库中创建表:SysConfig(用户存储项目中的配置数据)
*字段:
*ConfigKey:用于查询该条数据的key,做为主键
*ConfigValue:存储数据的值
*TypeName:该条配置数据的名称
*Description:说明
*CreateTime:创建时间
*LastModifyTime:上次修改的时间
*AllowEdit:是否可编辑
*LastValue:上一次的值
*tokenid的有效时间是两个小时=7200秒,每重新获取一次就更新一次LastModifyTime的值,将LastModifyTime和当前时间进行比对,如果小于7200秒则可以不用再次获取,反之则需要再次从微信获取。
*/
===================================================================================================
4.获取ticket。需要上一步中获取到的tokenid。
//////获取ticket /// ///获取到的tokenid /// strticket publicstaticstringGetTicket(stringtoken) { stringgetticketurl=string.Format("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={0}&type=jsapi",token); stringcontent=HttpHelper.HttpGet(getticketurl); JsApiTicketobj=JsonConvert.DeserializeObject(content); returnobj.ticket; }
5.生成签名的随机串
//生成签名的随机串
stringnoncestr=Guid.NewGuid().ToString().Replace("-","");
6.生成签名的时间戳
TimeSpants=DateTime.UtcNow-newDateTime(1970,1,1,0,0,0,0); stringtimestamp=Convert.ToInt64(ts.TotalSeconds).ToString();
7.生成签名
stringsignature=MakeSha1Sign(string.Format("jsapi_ticket={0}&noncestr={1}×tamp={2}&url={3}",jsapi_ticket,noncestr,timestamp,url));
///
///SDK生成签名
///注意:需要引用System.Security.dll
///
///
///str签名
publicstaticstringMakeSha1Sign(stringstr)
{
byte[]StrRes=Encoding.Default.GetBytes(str);
HashAlgorithmiSHA=newSHA1CryptoServiceProvider();
StrRes=iSHA.ComputeHash(StrRes);
StringBuilderEnText=newStringBuilder();
foreach(byteiByteinStrRes)
{
EnText.AppendFormat("{0:x2}",iByte);
}
returnEnText.ToString();
}
最后可以将这些步骤封装在一个方法中
//////获取调用微信接口用的SDKConfig /// ////// SDKConfig整个对象 publicstaticJsApiConfigGetJsSdkConfig(stringurl) { //获取tokenid stringaccess_token=GetWxTokenId(); //获取ticket stringjsapi_ticket=GetTicket(access_token); //生成签名的随机串 stringnoncestr=Guid.NewGuid().ToString().Replace("-",""); //生成签名的时间戳 TimeSpants=DateTime.UtcNow-newDateTime(1970,1,1,0,0,0,0); stringtimestamp=Convert.ToInt64(ts.TotalSeconds).ToString(); //签名 stringsignature=MakeSha1Sign(string.Format("jsapi_ticket={0}&noncestr={1}×tamp={2}&url={3}",jsapi_ticket,noncestr,timestamp,url)); JsApiConfigconfig=newJsApiConfig() { appId=appid, debug=false, nonceStr=noncestr, timestamp=timestamp, signature=signature, ticket=jsapi_ticket, //需要使用的JS接口列表 jsApiList=newstring[]{"chooseImage","previewImage","uploadImage","downloadImage"} }; returnconfig; }
页面上面调用我们上面配置好的内容
$.post('/WapCardInfo/GetSDKConfig',{url:location.href.split('#')[0]},function(data){
varconfigObj=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]
publicJsonResultGetSDKConfig(stringurl)
{
try
{
//这里就是调用上面封装的方法
JsSdkApi.jsapiConfigmodel=JsSdkApi.GetJsSdkConfig(url);
returnJson(model);
}
catch(Exceptionex)
{
LogHelper.Error("获取wxconfig出现异常:"+ex.Message.Replace("'","\""));
returnJson(newJsSdkApi.jsapiConfig());
}
}
至于需要的接口就去微信公众平台开发者文档中去查看啦。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。