using System; using System.Collections.Generic; using System.Linq; using System.Text; using Deepleo.Weixin.SDK.Helpers; using Codeplex.Data; using System.Net.Http; using System.IO; namespace Deepleo.Weixin.SDK.Card { /// /// 创建卡券接口 /// public class CreateCardAPI { /// ///上传LOGO接口 ///开发者需调用该接口上传商户图标至微信服务器,获取相应logo_url,用于卡券创建。 ///注意事项 ///1.上传的图片限制文件大小限制1MB,像素为300*300,支持JPG格式。 ///2.调用接口获取的logo_url进支持在微信相关业务下使用,否则会做相应处理。 /// /// /// /// 返回上传后路径 public static string UploadLogo(string access_token, string fileName, Stream inputStream) { var url = string.Format("http://api.weixin.qq.com/cgi-bin/uploadimg?access_token={0}", access_token); var returnMessage = DynamicJson.Parse(Util.HttpRequestPost(url, "buffer", fileName, inputStream)); if (returnMessage.errcode != 0) return string.Empty; return returnMessage.url; } /// /// 批量导入门店信息 /// 接口说明 ///支持商户调用该接口批量导入/新建门店信息,获取门店ID。 ///注:通过该接口导入的门店信息将进入门店审核流程,审核期间可正常使用。若导入的 ///门店信息未通过审核,则会被剔除出门店列表。 /// /// /// 门店列表 /// 数据示意: /// {"location_list":[ ///{ ///"business_name":"麦当劳", ///"branch_name":"赤岗店", ///"province":"广东省", ///"city":"广州市", ///"district":"海珠区", ///"address":"中国广东省广州市海珠区艺苑路11号", ///"telephone":"020-89772059", ///"category":"房产小区", ///"longitude":"115.32375", ///"latitude":"25.097486" ///}, ///{ ///"business_name":"麦当劳", ///"branch_name":"珠江店", ///"province":"广东省", ///"city":"广州市", ///"district":"海珠区", ///"address":"中国广东省广州市海珠区艺苑路12号", ///"telephone":"020-89772059", ///"category":"房产小区", ///"longitude":"113.32375", ///"latitude":"23.097486" ///}]} /// /// { /// "errcode":0, /// "errmsg":"ok", /// "location_id_list":[271262077,-1] ///} ///其中location_id_list中的 -1 表示失败 /// public static dynamic BatchAddLocation(string access_token, dynamic location_list) { var url = string.Format("https://api.weixin.qq.com/card/location/batchadd?access_token={0}", access_token); var client = new HttpClient(); var result = client.PostAsync(url, new StringContent(DynamicJson.Serialize(location_list))).Result; if (result.IsSuccessStatusCode) return null; return DynamicJson.Parse(result.Content.ReadAsStringAsync().Result); } /// /// 拉取门店列表 /// 获取在公众平台上申请创建及API导入的门店列表,用于创建卡券 /// /// /// 偏移量,0开始 /// 拉取数量,为0时默认拉取全部门店。 /// /// 返回数据示意: /// { "errcode":0, ///"errmsg":"ok", ///"location_list":[ ///{ ///"location_id":“493”, ///"business_name":"steventaohome", ///"phone":"020-12345678", ///"address":"广东省广州市番禺区广东省广州市番禺区南浦大道", ///"longitude":113.280212402, ///"latitude":23.0350666046 ///}, ///{ ///"location_id":“468”, ///"business_name":"TIT创意园B4", ///"phone":"020-12345678", ///"address":"广东省广州市海珠区", ///"longitude":113.325248718, ///"latitude":23.1008300781 ///} ///], ///"count":2 ///} /// public static dynamic BatchGetLocation(string access_token, int offset, int count) { var url = string.Format("https://api.weixin.qq.com/card/location/batchget??access_token={0}", access_token); var client = new HttpClient(); var sb = new StringBuilder(); sb.Append("{") .Append('"' + "offset" + '"' + ":").Append(offset) .Append('"' + "count" + '"' + ":").Append(count) .Append("}"); var result = client.PostAsync(url, new StringContent(sb.ToString())).Result; if (result.IsSuccessStatusCode) return null; return DynamicJson.Parse(result.Content.ReadAsStringAsync().Result); } /// /// 获取颜色列表接口 /// 获得卡券的最新颜色列表,用于卡券创建。 /// /// /// /// 返回数据结果示意: /// { ///"errcode":0, ///"errmsg":"ok", ///"colors":[ ///{"name":"Color010","value":"#55bd47"}, ///{"name":"Color020","value":"#10ad61"}, ///{"name":"Color030","value":"#35a4de"}, ///{"name":"Color040","value":"#3d78da"}, ///{"name":"Color050","value":"#9058cb"}, ///{"name":"Color060","value":"#de9c33"}, ///{"name":"Color070","value":"#ebac16"}, ///{"name":"Color080","value":"#f9861f"}, ///{"name":"Color081","value":"#f08500"}, ///{"name":"Color090","value":"#e75735"}, ///{"name":"Color100","value":"#d54036"}, ///{"name":"Color101","value":"#cf3e36"} ///] ///} public static dynamic GetColors(string access_token) { var url = string.Format("https://api.weixin.qq.com/card/getcolors?access_token={0}", access_token); var client = new HttpClient(); var result = client.GetAsync(url).Result; if (result.IsSuccessStatusCode) return null; return DynamicJson.Parse(result.Content.ReadAsStringAsync().Result); } /// /// 创建卡券 /// /// /// /// 数据示意: /// {"card":{ /// "card_type":"GROUPON", /// "groupon":{ /// "base_info":{ /// "logo_url": /// "http:\/\/www.supadmin.cn\/uploads\/allimg\/120216\/1_120216214725_1.jpg", /// "brand_name":"海底捞", /// "code_type":"CODE_TYPE_TEXT", /// "title":"132元双人火锅套餐", /// "sub_title":"", /// "color":"Color010", /// "notice":"使用时向服务员出示此券", /// "service_phone":"020-88888888", /// "description":"不可与其他优惠同享\n如需团购券发票,请在消费时向商户提出\n店内均可 /// 使用,仅限堂食\n餐前不可打包,餐后未吃完,可打包\n本团购券不限人数,建议2人使用,超过建议人 /// 数须另收酱料费5元/位\n本单谢绝自带酒水饮料", /// "date_info":{ /// "type":1, /// "begin_timestamp":1397577600, /// "end_timestamp":1422724261 /// }, /// "sku":{ /// "quantity":50000000 /// }, /// "get_limit":3, /// "use_custom_code":false, /// "bind_openid":false, /// "can_share":true, /// "can_give_friend":true, /// "location_id_list": [123,12321,345345], /// "url_name_type":"URL_NAME_TYPE_RESERVATION", /// "custom_url":"http://www.qq.com", /// "source":"大众点评" /// }, /// "deal_detail":"以下锅底2选1(有菌王锅、麻辣锅、大骨锅、番茄锅、清补凉锅、酸菜鱼锅可 /// 选):\n大锅1份12元\n小锅2份16元\n以下菜品2选1\n特级肥牛1份30元\n洞庭鮰鱼卷1份 /// 20元\n其他\n鲜菇猪肉滑1份18元\n金针菇1份16元\n黑木耳1份9元\n娃娃菜1份8元\n冬 /// 瓜1份6元\n火锅面2个6元\n欢乐畅饮2位12元\n自助酱料2位10元"} /// } /// } /// 具体参数意义,请参见官方文档。 /// /// /// { ///"errcode":0, ///"errmsg":"ok", ///"card_id":"p1Pj9jr90_SQRaVqYI239Ka1erkI" /// } public static dynamic CreateCard(string access_token, dynamic card) { var url = string.Format("https://api.weixin.qq.com/card/create?access_token={0}", access_token); var client = new HttpClient(); var result = client.PostAsync(url, new StringContent(DynamicJson.Serialize(card))).Result; if (result.IsSuccessStatusCode) return null; return DynamicJson.Parse(result.Content.ReadAsStringAsync().Result); } /// /// 为检测跳转外链请求来自微信,会在URL参数里加上签名。 /// /// appscret /// 指定的卡券code码,只能被领一次。 /// 创建卡券时获得的卡券ID /// public static string SignCustomUrl(string appscret, string encrypt_code, string card_id) { var stringADict = new Dictionary(); stringADict.Add("appscret", appscret); stringADict.Add("card_id", card_id); stringADict.Add("encrypt_code", encrypt_code); var sb = new StringBuilder(); foreach (var sA in stringADict.OrderBy(x => x.Key))//参数名ASCII码从小到大排序(字典序); { if (string.IsNullOrEmpty(sA.Value)) continue;//参数的值为空不参与签名; sb.Append(sA.Key).Append("=").Append(sA.Value).Append("&"); } var string1 = sb.ToString(); string1 = string1.Remove(string1.Length - 1, 1); return Util.Sha1(string1, "UTF-8");//对stringSignTemp进行MD5运算,再将得到的字符串所有字符转换为大写,得到sign值signValue。 } } }