C#微信开发之旅(三):基础类之WeiXinConst

开发过程中需要用的的公众号信息在这里配置,此外需要用到的Url信息无需更改。

    /// <summary>
    /// 微信 需要用到的Url、Json常量
    /// </summary>
    public class WeiXinConst
    {
        #region Value Const

        /// <summary>
        /// 微信开发者 AppId
        /// </summary>
        public const string AppId = "你的AppId";

        /// <summary>
        /// 微信开发者 Secret
        /// </summary>
        public const string Secret = "你得Secret";

        /// <summary>
        /// V2:支付请求中 用于加密的秘钥Key,可用于验证商户的唯一性,对应支付场景中的AppKey
        /// </summary>
        public static string PaySignKey = "V2.PaySignKey";

        /// <summary>
        /// V2:财付通签名key
        /// V3:商户支付密钥 Key。登录微信商户后台,进入栏目【账户设置】 【密码安全 】【API 安全】 【API 密钥】 ,进入设置 API 密钥。
        /// </summary>
        public const string PartnerKey = "PartnerKey";

        /// <summary>
        /// 商户号
        /// </summary>
        public const string PartnerId = "PartnerId";

        /// <summary>
        /// 百度地图Api  Ak
        /// </summary>
        public const string BaiduAk = "BaiduAk";

        /// <summary>
        /// 用于验证 请求 是否来自 微信
        /// </summary>
        public const string Token = "Token";

        /// <summary>
        /// 证书文件 路径
        /// </summary>
        public const string CertPath = @"E:\cert\apiclient_cert.pem";

        /// <summary>
        /// 证书文件密码(默认为商户号)
        /// </summary>
        public const string CertPwd = "111";

        #endregion

        #region Url Const

        #region AccessTokenUrl

        /// <summary>
        /// 公众号 获取Access_Token的Url(需Format  0.AppId 1.Secret)
        /// </summary>
        private const string AccessToken_Url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}";

        /// <summary>
        /// 公众号 获取Token的Url
        /// </summary>
        public static string WeiXin_AccessTokenUrl { get { return string.Format(AccessToken_Url, AppId, Secret); } }

        #endregion

        #region 获取用户信息Url

        /// <summary>
        /// 根据Code 获取用户OpenId Url
        /// </summary>
        private const string User_GetOpenIdUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code";

        /// <summary>
        /// 根据Code 获取用户OpenId的Url 需要Format 0.code
        /// </summary>
        public static string WeiXin_User_OpenIdUrl { get { return string.Format(User_GetOpenIdUrl, AppId, Secret, "{0}"); } }

        /// <summary>
        /// 根据OpenId 获取用户基本信息 Url(需要Format0.access_token 1.openid)
        /// </summary>
        public const string WeiXin_User_GetInfoUrl = "https://api.weixin.qq.com/cgi-bin/user/info?access_token={0}&openid={1}&lang=zh_CN";

        #endregion

        #region OAuth2授权Url

        /// <summary>
        /// OAuth2授权Url,需要Format0.AppId  1.Uri  2.state
        /// </summary>
        private const string OAuth2_Url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope=snsapi_base&state={2}#wechat_redirect";

        /// <summary>
        /// OAuth2授权Url,需要Format  0.Uri  1.state
        /// </summary>
        public static string WeiXin_User_OAuth2Url { get { return string.Format(OAuth2_Url, AppId, "{0}", "{1}"); } }

        #endregion

        #region QrCode Url

        /// <summary>
        /// 创建获取QrCode的Ticket Url  需要Format 0 access_token
        /// </summary>
        public const string WeiXin_Ticket_CreateUrl = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token={0}";

        /// <summary>
        /// 获取二维码图片Url,需要Format 0.ticket
        /// </summary>
        public const string WeiXin_QrCode_GetUrl = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket={0}";

        #endregion

        #region Baidu 逆地理编码Url

        /// <summary>
        /// 经纬度  逆地理编码 Url  需要Format 0.ak  1.经度  2.纬度
        /// </summary>
        private const string BaiduGeoCoding_ApiUrl = "http://api.map.baidu.com/geocoder/v2/?ak={0}&location={1},{2}&output=json&pois=0";

        /// <summary>
        /// 经纬度  逆地理编码 Url  需要Format 0.经度  1.纬度
        /// </summary>
        public static string Baidu_GeoCoding_ApiUrl
        {
            get
            {
                return string.Format(BaiduGeoCoding_ApiUrl, BaiduAk, "{0}", "{1}");
            }
        }

        #endregion

        #region Menu Url

        /// <summary>
        /// 创建菜单Url 需要Format 0.access_token
        /// </summary>
        public const string WeiXin_Menu_CreateUrl = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token={0}";

        /// <summary>
        /// 获取菜单Url 需要Format 0.access_token
        /// </summary>
        public const string WeiXin_Menu_GetUrl = "https://api.weixin.qq.com/cgi-bin/menu/get?access_token={0}";

        /// <summary>
        /// 删除菜单Url 需要Format 0.access_token
        /// </summary>
        public const string WeiXin_Menu_DeleteUrl = "https://api.weixin.qq.com/cgi-bin/menu/delete?access_token={0}";

        #endregion

        #region 支付相关Url

        /// <summary>
        /// 生成预支付账单Url ,需替换 0 access_token
        /// </summary>
        public const string WeiXin_Pay_PrePayUrl = "https://api.weixin.qq.com/pay/genprepay?access_token={0}";

        /// <summary>
        /// 订单查询Url ,需替换0 access_token
        /// </summary>
        public const string WeiXin_Pay_OrderQueryUrl = "https://api.weixin.qq.com/pay/orderquery?access_token={0}";

        /// <summary>
        /// 发货通知Url,需替换 0 access_token
        /// </summary>
        public const string WeiXin_Pay_DeliverNotifyUrl = "https://api.weixin.qq.com/pay/delivernotify?access_token={0}";

        #region 统一支付相关Url (V3接口)

        /// <summary>
        /// 统一预支付Url
        /// </summary>
        public const string WeiXin_Pay_UnifiedPrePayUrl = "https://api.mch.weixin.qq.com/pay/unifiedorder";

        /// <summary>
        /// 订单查询Url
        /// </summary>
        public const string WeiXin_Pay_UnifiedOrderQueryUrl = "https://api.mch.weixin.qq.com/pay/orderquery";

        /// <summary>
        /// 退款申请Url
        /// </summary>
        public const string WeiXin_Pay_UnifiedOrderRefundUrl = "https://api.mch.weixin.qq.com/secapi/pay/refund";

        #endregion

        #endregion

        #endregion

        #region Json Const

        /// <summary>
        /// 获取二维码 所需Ticket 需要上传的Json字符串(需要Format 0.scene_id)
        /// </summary>
        /// <remarks>scene_id场景值ID  永久二维码时最大值为100000(目前参数只支持1--100000)</remarks>
        public const string WeiXin_QrCodeTicket_Create_JsonString = "{\"action_name\": \"QR_LIMIT_SCENE\", \"action_info\": {\"scene\": {\"scene_id\":{0}}}}";

        #endregion

    }

  

时间: 2024-12-21 08:11:07

C#微信开发之旅(三):基础类之WeiXinConst的相关文章

C#微信开发之旅(三):AccessToken获取及全局管理

由于AccessToken有效期为2小时,并且接口调用有数量限制,所以开始时选择用WCF做了全局管理(项目中要到AccessToken的地方太多了,支付相关.生成二维码.获取用户信息.菜单操作等等) 下面是AccessToken全局管理的单例类,(原理:通过微信接口获取AccessToken,存储在内存中,当其他项目调用时,会判断是否过期,过期去拿新Token再返回): 1 /// <summary> 2 /// AccessToken类,公众号通过此token 获取相关信息 (单例类) 3

C#微信开发之旅(十三):V2订单查询&amp;退款(完结)

订单查询 用处同V3订单查询,直接上代码: 1 /// <summary> 2 /// V2订单查询 3 /// </summary> 4 public void QueryOrder() 5 { 6 string orderNo = string.Empty; 7 8 WxPayModel model = WxPayModel.Create(orderNo); 9 OrderQueryMessage message = WeiXinHelper.OrderQuery(model.

C#微信开发之旅(九):JSAPI支付(V3)(相关代码待补全)

微信开发遇到最复杂的就是支付了,无论V2还是V3.这篇文章将给出全套的V3版本JSAPI支付代码,包括预支付->支付->订单查询->通知->退款,其中前三步已经上线应用,退款只是简单测试了一下,大家要用的话需要谨慎... 一.预支付&支付 实际就是讲订单信息交给微信端,返回给我们一个预支付id(与V2app支付相似),支付时将预支付id交给微信处理.注意:预支付id 需存储,每个out_trade_no(我们自己的订单号)只能对应一个预支付id.代码奉上:(mvc demo

微信开发学习日记(三):6点经验

1.token验证和微信请求响应token验证,用get方法. 微信请求入口,用psot方法. 一个微信公众号或者轻应用的入口,就是一个url,同一个url分为get和post. get的时候,4个参数都不为空,必须校验. post的时候,也要校验参数,只是不用输出echostr.post的时候,echostr可能为空,是否要检查echostr是否为空呢?既然不用输出,按说不需要校验.2.接口访问凭证access_token每次获得一次凭证,有一定的过期时间.也就是说,可以缓存起来.暂时还没仔细

C#微信开发之旅(二):基础类之HttpClientHelper

包含通过HttpClient发起get或post请求的方法,所有调用微信接口的操作都通过此类.话不多说,直接上代码: 1 public class HttpClientHelper 2 { 3 /// <summary> 4 /// get请求 5 /// </summary> 6 /// <param name="url"></param> 7 /// <returns></returns> 8 public s

C#微信开发之旅(二):基础类之HttpClientHelper(更新:SSL安全策略)

public class HttpClientHelper   2     {   3         /// <summary>   4         /// get请求   5         /// </summary>   6         /// <param name="url"></param>   7         /// <returns></returns>   8         pub

C#微信开发之旅(五):操作公众号菜单

菜单操作类: 1 #region 创建.查询.删除菜单 2 3 /// <summary> 4 /// 创建菜单 5 /// </summary> 6 /// <param name="menuData">菜单字符串</param> 7 /// <returns>ReturnMsg.ErrCode为0则创建菜单成功</returns> 8 public static ErrorMessage CreateMenu(

微信开发之(三)获取微信服务器IP地址

官方文档解析:获取微信服务器IP地址 在上面的官方文档中我们可以直接在最浏览器里面进行测试例如: 请求访问这个地址,前提是已经获得了access_token的值上篇已获得:https://api.weixin.qq.com/cgi-bin/getcallbackip?access_token=ACCESS_TOKEN   是否必须 说明 access_token 是 公众号的access_token C#代码(access_token的值见上一篇的获取方法): /// <summary> //

C#微信开发之旅(七):根据经纬度获取地址(百度地图Api)

开发过程中遇到这样的需求,根据用户的地理位置不同,显示不同区域的产品. 这里用到了微信:获取用户地理位置 的功能,(每隔5秒上报 或 进入回话时上报一次),我们根据微信推送过来的经纬度,来转换成实际地址,这里用到的是百度地图Api(要用的话先申请百度ak). PS:微信的这个功能很不稳定,靠它不靠谱,经常不推送...(后来加了手动定位,百度地图Web定位组件 还不错,不是广告!0.0) #region 根据经纬度 获取地址信息 BaiduApi /// <summary> /// 根据经纬度