tijian_tieying/web/dccdc/Common/Deepleo.Weixin.SDK/Card/ManageCardAPI.cs

292 lines
13 KiB
C#
Raw Normal View History

2025-02-20 12:14:39 +08:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Http;
using Codeplex.Data;
namespace Deepleo.Weixin.SDK.Card
{
/// <summary>
/// 卡券管理接口
/// </summary>
public class ManageCardAPI
{
/// <summary>
/// 删除卡券
/// 删除卡券接口允许商户删除任意一类卡券。删除卡券后该卡券对应已生成的领取用二维码、添加到卡包JSAPI均会失效。
/// 注意:如用户在商家删除卡券前已领取一张或多张该卡券依旧有效。即删除卡券不能删除已被用户领取,保存在微信客户端中的卡券。
/// </summary>
/// <param name="access_token"></param>
/// <param name="card_id">卡券ID</param>
/// <returns>{
///"errcode":0,
///"errmsg":"ok"
///}</returns>
public static string DeleteCard(string access_token, string card_id)
{
var url = string.Format("https://api.weixin.qq.com/card/delete?access_token={0}", access_token);
var client = new HttpClient();
var sb = new StringBuilder();
sb.Append("{")
.Append('"' + "card_id" + '"' + ":").Append(card_id)
.Append("}");
var result = client.PostAsync(url, new StringContent(sb.ToString())).Result;
if (result.IsSuccessStatusCode) return string.Empty;
return DynamicJson.Parse(result.Content.ReadAsStringAsync().Result);
}
/// <summary>
/// 查询code
///
/// 调用查询code接口可获取code的有效性非自定义code该code对应的用户openid、卡券有效期等信息。
/// 自定义codeuse_custom_code为true的卡券调用接口时post数据中需包含card_id非自定义code不需上报。
/// </summary>
/// <param name="access_token"></param>
/// <param name="code">要查询的序列号</param>
/// <param name="card_id">要消耗序列号所述的card_id生成券时use_custom_code填写true时必填。非自定义code不必填写。</param>
/// <returns>{
///"errcode":0,
///"errmsg":"ok",
///"openid":"oFS7Fjl0WsZ9AMZqrI80nbIq8xrA",
///"card":{
///"card_id":"pFS7Fjg8kV1IdDz01r4SQwMkuCKc",
///"begin_time":1404205036,
///"end_time":1404205036,
///}
///}
///
///注固定时长有效期会根据用户实际领取时间转换如用户2013年10月1日领取固定时长有效期为90天即有效时间为2013年10月1日-12月29日有效。
/// </returns>
public static string GetCardCode(string access_token, string code, string card_id = "")
{
var url = string.Format("https://api.weixin.qq.com/card/get?access_token={0}", access_token);
var client = new HttpClient();
var sb = new StringBuilder();
sb.Append("{")
.Append('"' + "code" + '"' + ":").Append(code);
if (!string.IsNullOrEmpty(card_id))
{
sb.Append('"' + "card_id" + '"' + ":").Append(card_id);
}
sb.Append("}");
var result = client.PostAsync(url, new StringContent(sb.ToString())).Result;
if (result.IsSuccessStatusCode) return string.Empty;
return DynamicJson.Parse(result.Content.ReadAsStringAsync().Result);
}
/// <summary>
/// 批量查询卡列表
/// </summary>
/// <param name="access_token"></param>
/// <param name="offset">查询卡列表的起始偏移量从0开始即offset:5是指从从列表里的第六个开始读取。</param>
/// <param name="count">需要查询的卡片的数量数量最大50</param>
/// <returns>{
/// "errcode":0,
/// "errmsg":"ok",
/// "card_id_list":["ph_gmt7cUVrlRk8swPwx7aDyF-pg"],
/// "total_num":1
/// }</returns>
public static string BatchGetCard(string access_token, int offset, int count)
{
var url = string.Format("https://api.weixin.qq.com/card/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 string.Empty;
return DynamicJson.Parse(result.Content.ReadAsStringAsync().Result);
}
/// <summary>
/// 查询卡券详情
/// </summary>
/// <param name="access_token"></param>
/// <param name="card_id">卡券ID</param>
/// <returns>
/// 返回结果示意
///"errcode":0,
///"errmsg":"ok",
///"card":{
///"card_type": "GROUPON",
///"groupon":{
///"base_info":{
///"status":1,
///"id":"p1Pj9jr90_SQRaVqYI239Ka1erkI",
///"logo_url":
///"http://www.supadmin.cn/uploads/allimg/120216/1_120216214725_1.jpg",
///"appid":"wx588def6b0089dd48",
///"code_type":"CODE_TYPE_TEXT",
///"brand_name":"海底捞",
///"title":"132元双人火锅套餐",
///"sub_title":"",
///"date_info":{
///"type":1,
///"begin_timestamp":1397577600,
///"end_timestamp":1399910400
///},
///"color":"#3373bb",
///"notice":"使用时向服务员出示此券",
///"service_phone":"020-88888888",
///"description":"不可与其他优惠同享\n如需团购券发票请在消费时向商户提出\n店内均可使用仅限堂食\n餐前不可打包餐后未吃完可打包\n本团购券不限人数建议2人使用超过建议人数须另收酱料费5元/位\n本单谢绝自带酒水饮料",
/// "use_limit":1,
///"get_limit":3,
///"can_share":true,
///"location_id_list": [123,12321,345345]
///"url_name_type":"URL_NAME_TYPE_RESERVATION",
///"custom_url":"http://www.qq.com",
///"source":"大众点评"
///"sku":{
///"quantity":0
///}
///},
///"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元",
///}
///}
///}
///}
///<returns>
public static string GetCard(string access_token, string card_id)
{
var url = string.Format("https://api.weixin.qq.com/card/get?access_token={0}", access_token);
var client = new HttpClient();
var sb = new StringBuilder();
sb.Append("{")
.Append('"' + "card_id" + '"' + ":").Append(card_id)
.Append("}");
var result = client.PostAsync(url, new StringContent(sb.ToString())).Result;
if (result.IsSuccessStatusCode) return string.Empty;
return DynamicJson.Parse(result.Content.ReadAsStringAsync().Result);
}
/// <summary>
/// 更改code
/// 为确保转赠后的安全性微信允许自定义code的商户对已下发的code进行更改。
///注为避免用户疑惑建议仅在发生转赠行为后发生转赠后微信会通过事件推送的方式告知商户被转赠的卡券code对用户的code进行更改。
/// </summary>
/// <param name="access_token"></param>
/// <param name="card_id">卡券ID</param>
/// <param name="code">卡券的code编码</param>
/// <param name="new_code">新的卡券code编码</param>
/// <returns>
/// {
///"errcode":0,
///"errmsg":"ok"
///}</returns>
public static string UpdateCardCode(string access_token, string code, string card_id, string new_code)
{
var url = string.Format("https://api.weixin.qq.com/card/code/update?access_token={0}", access_token);
var client = new HttpClient();
var sb = new StringBuilder();
sb.Append("{")
.Append('"' + "code" + '"' + ":").Append(code)
.Append('"' + "card_id" + '"' + ":").Append(card_id)
.Append('"' + "new_code" + '"' + ":").Append(new_code)
.Append("}");
var result = client.PostAsync(url, new StringContent(sb.ToString())).Result;
if (result.IsSuccessStatusCode) return string.Empty;
return DynamicJson.Parse(result.Content.ReadAsStringAsync().Result);
}
/// <summary>
/// 设置卡券失效接口
/// 为满足改票、退款等异常情况,可调用卡券失效接口将用户的卡券设置为失效状态。
/// 注:设置卡券失效的操作不可逆,即无法将设置为失效的卡券调回有效状态,商家须慎重调用该接口。
/// </summary>
/// <param name="access_token"></param>
/// <param name="code">需要设置为失效的code</param>
/// <param name="card_id">自定义code的卡券必填。非自定义code的卡券不填。</param>
/// <returns>
/// {
///"errcode":0,
///"errmsg":"ok"
///}
///</returns>
public static string UnavailableCardCode(string access_token, string code, string card_id = "")
{
var url = string.Format("https://api.weixin.qq.com/card/code/unavailable?access_token={0}", access_token);
var client = new HttpClient();
var sb = new StringBuilder();
sb.Append("{")
.Append('"' + "code" + '"' + ":").Append(code);
if (!string.IsNullOrEmpty(card_id))
{
sb.Append('"' + "card_id" + '"' + ":").Append(card_id);
}
sb.Append("}");
var result = client.PostAsync(url, new StringContent(sb.ToString())).Result;
if (result.IsSuccessStatusCode) return string.Empty;
return DynamicJson.Parse(result.Content.ReadAsStringAsync().Result);
}
/// <summary>
/// 查询卡券详情
/// </summary>
/// <param name="access_token"></param>
/// <param name="new_card">
/// {
///"card_id": "xxxxxxxxxxxxx",
///"member_card":{
///"base_info":{
///"logo_url":
///"http:\/\/www.supadmin.cn\/uploads\/allimg\/120216\/1_120216214725_1.jpg",
///"color":"Color010",
///"notice":"使用时向服务员出示此券",
///"service_phone":"020-88888888",
///"description":"不可与其他优惠同享\n如需团购券发票请在消费时向商户提出\n店内均可使用仅限堂食\n餐前不可打包餐后未吃完可打包\n本团购券不限人数建议2人使用超过建议人数须另收酱料费5元/位\n本单谢绝自带酒水饮料"
///"location_id_list": [123,12321,345345]
///},
///"bonus_cleared":"aaaaaaaaaaaaaa",
///"bonus_rules":"aaaaaaaaaaaaaa",
///"prerogative":""
///}
///}
/// </param>
/// <returns>
/// {
///"errcode":0,
///"errmsg":"ok"
///}
///</returns>
public static string UpdateCard(string access_token, dynamic new_card)
{
var url = string.Format("https://api.weixin.qq.com/card/update?access_token={0}", access_token);
var client = new HttpClient();
var result = client.PostAsync(url, new StringContent(DynamicJson.Serialize(new_card))).Result;
if (result.IsSuccessStatusCode) return string.Empty;
return DynamicJson.Parse(result.Content.ReadAsStringAsync().Result);
}
/// <summary>
/// 库存修改接口
/// 增减某张卡券的库存。
/// </summary>
/// <param name="access_token"></param>
/// <param name="card_id">卡券ID</param>
/// <param name="increase_stock_value">增加多少库存可以不填或填0</param>
/// <param name="reduce_stock_value">减少多少库存可以不填或填0</param>
/// <returns>
/// {
///"errcode":0,
///"errmsg":"ok"
///}
///</returns>
public static string ModifyCardStock(string access_token, string card_id, int increase_stock_value, int reduce_stock_value)
{
var url = string.Format("https://api.weixin.qq.com/card//modifystock?access_token={0}", access_token);
var client = new HttpClient();
var sb = new StringBuilder();
sb.Append("{")
.Append('"' + "card_id" + '"' + ":").Append(card_id)
.Append('"' + "increase_stock_value" + '"' + ":").Append(increase_stock_value)
.Append('"' + "reduce_stock_value" + '"' + ":").Append(reduce_stock_value)
.Append("}");
var result = client.PostAsync(url, new StringContent(sb.ToString())).Result;
if (result.IsSuccessStatusCode) return string.Empty;
return DynamicJson.Parse(result.Content.ReadAsStringAsync().Result);
}
}
}