好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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测试数据/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测试数据/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}&timestamp={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}&timestamp={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());

       }

     }

至于需要的接口就去微信公众平台开发者文档中去查看啦。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

dy("nrwz");

查看更多关于C#调用微信接口的相关代码的详细内容...

  阅读:40次