/// <summary> /// 公共API => 转换短链接 /// 不需要证书 /// http://pay.weixin.qq.com/wiki/doc/api/index.php?chapter=9_9 ///应用场景 ///该接口主要用于扫码原生支付模式一中的二维码链接转成短链接(weixin://wxpay/s/XXXXXX),减小二维码数据量,提升扫描速度和精确度。 /// </summary> /// <param name="appid">(必填) String(32) 微信分配的公众账号ID</param> /// <param name="mch_id">(必填) String(32) 微信支付分配的商户号</param> /// <param name="long_url">(必填) String(512) URL链接 需要转换的URL,签名用原串,传输需URL encode </param> /// <param name="nonce_str">(必填) 随机字符串 随机字符串,不长于32位。</param> /// <param name="partnerKey">(必填)API密钥</param> /// <returns> 参见:http://pay.weixin.qq.com/wiki/doc/api/index.php?chapter=9_9 </returns> public static string ShortUrl(string appid, string mch_id, string long_url, string nonce_str, string partnerKey) { var stringADict = new Dictionary <string, string> { { "appid", appid }, { "mch_id", mch_id }, { "nonce_str", nonce_str }, { "long_url", long_url } }; var sign = PayUtil.Sign(stringADict, partnerKey);//生成签名字符串 var postdata = PayUtil.GeneralPostdata(stringADict, sign); var url = "https://api.mch.weixin.qq.com/tools/shorturl"; var result = HttpTo.Post(url, postdata); return(result); }
/// <summary> /// /// </summary> /// <param name="access_token"></param> /// <param name="order_id">订单ID</param> /// <param name="need_delivery">商品是否需要物流(0-不需要,1-需要,无该字段默认为需要物流)</param> /// <param name="is_others">是否为6.4.5表之外的其它物流公司(0-否,1-是,无该字段默认为不是其它物流公司) /// 6.4.5附:物流公司ID /// 物流公司 ID /// ============================= /// 邮政EMS Fsearch_code /// 申通快递 002shentong /// 中通速递 066zhongtong /// 圆通速递 056yuantong /// 天天快递 042tiantian /// 顺丰速运 003shunfeng /// 韵达快运 059Yunda /// 宅急送 064zhaijisong /// 汇通快运 020huitong /// 易迅快递 zj001yixun /// ============================ /// </param> /// <param name="delivery_company"> /// 物流公司ID(参考《物流公司ID》; /// 当need_delivery为0时,可不填本字段; /// 当need_delivery为1时,该字段不能为空; /// 当need_delivery为1且is_others为1时,本字段填写其它物流公司名称)</param> /// <param name="delivery_track_no"> /// 运单ID( /// 当need_delivery为0时,可不填本字段; /// 当need_delivery为1时,该字段不能为空; /// ) /// </param> /// <returns> /// { ///"errcode": 0, ///"errmsg": "success" ///} ///</returns> public static string SetDelivery(string access_token, string order_id, int need_delivery, int is_others, string delivery_track_no = "", string delivery_company = "") { var content = new StringBuilder(); content.Append("{") .Append('"' + "order_id" + '"' + ": " + '"' + order_id + '"').Append(",") .Append('"' + "need_delivery" + '"' + ": " + need_delivery).Append(",") .Append('"' + "is_others" + '"' + ": " + is_others); if (need_delivery == 1) { content.Append(",") .Append('"' + "delivery_company" + '"' + ": " + '"' + delivery_company + '"').Append(",") .Append('"' + "delivery_track_no" + '"' + ": " + '"' + delivery_track_no + '"'); } content.Append("}"); var result = HttpTo.Post(string.Format("https://api.weixin.qq.com/merchant/order/setdelivery?access_token={0}", access_token), content.ToString()); return(result); }
/// <summary> /// 撤销支付API /// http://pay.weixin.qq.com/wiki/doc/api/index.php?chapter=5_6 /// 应用场景:支付交易返回失败或支付系统超时,调用该接口撤销交易。如果此订单用户支付失败,微信支付系统会将此订单关闭;如果用户支付成功,微信支付系统会将此订单资金退还给用户。 /// 注意:7天以内的交易单可调用撤销,其他正常支付的单如需实现相同功能请调用申请退款API。提交支付交易后调用【查询订单API】,没有明确的支付结果再调用【撤销订单API】。 /// 请求需要双向证书 /// </summary> /// <param name="appid">(必填) String(32) 微信分配的公众账号ID</param> /// <param name="mch_id">(必填) String(32) 微信支付分配的商户号</param> /// <param name="transaction_id"> String(32) 微信订单号 优先使用</param> /// <param name="out_trade_no">String(32) 商户订单号 </param> /// <param name="nonce_str">(必填) String(32) 随机字符串,不长于32位</param> /// <param name="partnerKey">API密钥</param> /// <returns></returns> public static string Reverse(string appid, string mch_id, string transaction_id, string out_trade_no, string nonce_str, string partnerKey) { var stringADict = new Dictionary <string, string> { { "appid", appid }, { "mch_id", mch_id }, { "transaction_id", transaction_id }, { "out_trade_no", out_trade_no }, { "nonce_str", nonce_str } }; var sign = PayUtil.Sign(stringADict, partnerKey);//生成签名字符串 var postdata = PayUtil.GeneralPostdata(stringADict, sign); var url = "https://api.mch.weixin.qq.com/secapi/pay/reverse"; var result = HttpTo.Post(url, postdata); return(result); }
/// <summary> /// 语义理解 /// </summary> /// <param name="access_token">根据appid和appsecret获取到的token</param> /// <param name="query">输入文本串</param> /// <param name="category">需要使用的服务类型,多个用“,”隔开,不能为空</param> /// <param name="latitude">纬度坐标,与经度同时传入;与城市二选一传入</param> /// <param name="longitude">经度坐标,与纬度同时传入;与城市二选一传入</param> /// <param name="city">城市名称,与经纬度二选一传入</param> /// <param name="region">区域名称,在城市存在的情况下可省;与经纬度二选一传入</param> /// <param name="appid">公众号唯一标识,用于区分公众号开发者</param> /// <param name="uid">用户唯一id(非开发者id),用户区分公众号下的不同用户(建议填入用户openid),如果为空,则无法使用上下文理解功能。appid和uid同时存在的情况下,才可以使用上下文理解功能。</param> /// <returns></returns> public static string Semantic(string access_token, string query, string category, string latitude, string longitude, string city, string region, string appid, string uid) { var builder = new StringBuilder(); builder .Append("{") .Append('"' + "query" + '"' + ":").Append(query).Append(",") .Append('"' + "category" + '"' + ":").Append(category).Append(",") .Append('"' + "latitude" + '"' + ":").Append(latitude).Append(",") .Append('"' + "longitude" + '"' + ":").Append(longitude).Append(",") .Append('"' + "city" + '"' + ":").Append(city).Append(",") .Append('"' + "region" + '"' + ":").Append(region).Append(",") .Append('"' + "appid" + '"' + ":").Append(appid).Append(",") .Append('"' + "uid" + '"' + ":").Append(uid).Append(",") .Append("}"); var result = HttpTo.Post(string.Format("https://api.weixin.qq.com/semantic/semproxy/search?access_token={0}", access_token), builder.ToString()); return(result); }
/// <summary> /// 公共API => 下载对账单 /// 不需要证书 /// http://pay.weixin.qq.com/wiki/doc/api/index.php?chapter=9_6 ///应用场景 ///商户可以通过该接口下载历史交易清单。比如掉单、系统错误等导致商户侧和微信侧数据不一致,通过对账单核对后可校正支付状态。 ///注意: ///1.微信侧未成功下单的交易不会出现在对账单中。支付成功后撤销的交易会出现在对账单中,跟原支付单订单号一致,bill_type为REVOKED; ///2.微信在次日9点启动生成前一天的对账单,建议商户10点后再获取; ///3.对账单中涉及金额的字段单位为“元”。 /// </summary> /// <param name="appid">(必填) String(32) 微信分配的公众账号ID</param> /// <param name="mch_id">(必填) String(32) 微信支付分配的商户号</param> /// <param name="device_info"> String(32) 微信支付分配的终端设备号,商户自定义</param> /// <param name="nonce_str">(必填) 随机字符串 随机字符串,不长于32位。</param> /// <param name="bill_date">String(8) 对账单日起 下载对账单的日期,格式:20140603 </param> /// <param name="bill_type">String(8) 账单类型 ALL,返回当日所有订单信息,默认值 SUCCESS,返回当日成功支付的订单; REFUND,返回当日退款订单; REVOKED,已撤销的订单 </param> /// <param name="partnerKey">API密钥</param> /// <returns> /// 成功时,数据以文本表格的方式返回,第一行为表头,后面各行为对应的字段内容,字段内容跟查询订单或退款结果一致,具体字段说明可查阅相应接口。 /// 参见:http://pay.weixin.qq.com/wiki/doc/api/index.php?chapter=9_6 </returns> public static string RefundQuery(string appid, string mch_id, string device_info, string nonce_str, string bill_date, string bill_type, string partnerKey) { var stringADict = new Dictionary <string, string> { { "appid", appid }, { "mch_id", mch_id }, { "device_info", device_info }, { "nonce_str", nonce_str }, { "bill_date", bill_date }, { "bill_type", bill_type } }; var sign = PayUtil.Sign(stringADict, partnerKey);//生成签名字符串 var postdata = PayUtil.GeneralPostdata(stringADict, sign); var url = "https://api.mch.weixin.qq.com/pay/refundquery"; var result = HttpTo.Post(url, postdata); return(result); }
/// <summary> /// 生成带参数的二维码 /// </summary> /// <param name="token"></param> /// <param name="type">二维码类型,QR_SCENE为临时,QR_LIMIT_SCENE为永久</param> /// <param name="scene_id">场景值ID,临时二维码时为32位非0整型,永久二维码时最大值为100000(目前参数只支持1--100000)</param> /// <param name="days"></param> /// <returns></returns> public static string Create(string token, ParameterQrcodeType type, int scene_id, int days) { var content = new StringBuilder(); content.Append("{"); var action_name = "QR_LIMIT_SCENE"; if (type == ParameterQrcodeType.QR_SCENE) { action_name = "QR_SCENE"; content.Append('"' + "expire_seconds" + '"' + ":").Append(new TimeSpan(days, 0, 0, 0, 0).TotalSeconds).Append(","); } content .Append('"' + "action_name" + '"' + ": " + '"' + action_name + '"' + ",") .Append('"' + "action_info" + '"' + ": " + "{" + '"' + "scene" + '"' + ":{" + '"' + "scene_id" + '"' + ":" + scene_id.ToString() + "}}}"); var result = HttpTo.Post( string.Format("https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token={0}", token), content.ToString()); return(result); }
/// <summary> /// 公共API => 统一下单 /// 不需要证书 http://pay.weixin.qq.com/wiki/doc/api/index.php?chapter=9_1 /// 应用场景 /// 除被扫支付场景以外,商户系统先调用该接口在微信支付服务后台生成预支付交易单,返回正确的预支付交易回话标识后再按扫码、JSAPI、APP等不同场景生成交易串调起支付。 /// </summary> /// <param name="appid">(必填) String(32) 微信分配的公众账号ID</param> /// <param name="mch_id">(必填) String(32) 微信支付分配的商户号</param> /// <param name="device_info"> String(32) 微信支付分配的终端设备号,商户自定义</param> /// <param name="nonce_str">(必填) String(32) 随机字符串,不长于32位</param> /// <param name="body">(必填) String(32) 商品描述 商品或支付单简要描</param> /// <param name="detail"> String(8192) 商品详情 商品名称明细列表</param> /// <param name="attach"> String(127) 附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据</param> /// <param name="out_trade_no">(必填) String(32) 商家订单ID,32个字符内、可包含字母, 其他说明见第4.2节商户订单号:http://pay.weixin.qq.com/wiki/doc/api/index.php?chapter=4_2 </param> /// <param name="fee_type">符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见第4.2节货币类型: http://pay.weixin.qq.com/wiki/doc/api/index.php?chapter=4_2 </param> /// <param name="total_fee">(必填) Int 订单总金额,只能为整数,详见第4.2节支付金额:http://pay.weixin.qq.com/wiki/doc/api/index.php?chapter=4_2 </param> /// <param name="spbill_create_ip">(必填) String(32)终端IP APP和网页支付提交用户端IP,Native支付填调用微信支付API的机器IP。</param> /// <param name="time_start">String(14) 订单生成时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。</param> /// <param name="time_expire">String(14) 订单失效时间,格式为yyyyMMddHHmmss,如2009年12月27日9点10分10秒表示为20091227091010。</param> /// <param name="goods_tag">String(32) 商品标记,代金券或立减优惠功能的参数,说明详见第10节代金券或立减优惠:http://pay.weixin.qq.com/wiki/doc/api/index.php?chapter=10_1 </param> /// <param name="notify_url">(必填) String(256) 接收微信支付异步通知回调地址 </param> /// <param name="trade_type">(必填) String(16) 交易类型,取值如下:JSAPI,NATIVE,APP,详细说明见第4.2节参数规定:http://pay.weixin.qq.com/wiki/doc/api/index.php?chapter=4_2 </param> /// <param name="product_id">(trade_type=NATIVE,此参数必传)String(32) 商品ID,trade_type=NATIVE,此参数必传。此id为二维码中包含的商品ID,商户自行定义。 </param> /// <param name="openid">(trade_type=JSAPI,此参数必传)String(128)用户标识,trade_type=JSAPI,此参数必传,用户在商户appid下的唯一标识。下单前需要调用【网页授权获取用户信息】接口获取到用户的Openid。 </param> /// <param name="partnerKey">API密钥</param> /// <param name="returnMsg"></param> /// <param name="xml"></param> /// <returns>返回json字符串,格式参见:http://pay.weixin.qq.com/wiki/doc/api/index.php?chapter=9_1 </returns> public static string UnifiedOrder(string appid, string mch_id, string device_info, string nonce_str, string body, string detail, string attach, string out_trade_no, string fee_type, int total_fee, string spbill_create_ip, string time_start, string time_expire, string goods_tag, string notify_url, string trade_type, string product_id, string openid, string partnerKey, out string returnMsg, out string xml ) { var stringADict = new Dictionary <string, string> { { "appid", appid }, { "mch_id", mch_id }, { "device_info", device_info }, { "nonce_str", nonce_str }, { "body", body }, { "attach", attach }, { "out_trade_no", out_trade_no }, { "fee_type", fee_type }, { "total_fee", total_fee.ToString() }, { "spbill_create_ip", spbill_create_ip }, { "time_start", time_start }, { "time_expire", time_expire }, { "goods_tag", goods_tag }, { "notify_url", notify_url }, { "trade_type", trade_type }, { "product_id", product_id }, { "openid", openid } }; var sign = PayUtil.Sign(stringADict, partnerKey);//生成签名字符串 var postdata = PayUtil.GeneralPostdata(stringADict, sign); xml = postdata; var url = "https://api.mch.weixin.qq.com/pay/unifiedorder"; var result = HttpTo.Post(url, postdata); returnMsg = result; return(result); }
/// <summary> /// 增加货架 /// </summary> /// <param name="access_token"></param> /// <param name="content">货架详情,参见官方文档 /// 注意:货架有五个控件,每个控件post的数据都不一样。 /// </param> /// <returns> /// { ///"errcode":0, ///"errmsg":"success", ///"shelf_id": 12 ///} /// </returns> public static string Add(string access_token, object content) { var result = HttpTo.Post(string.Format("https://api.weixin.qq.com/merchant/shelf/add?access_token={0}", access_token), content.ToJson()); return(result); }
/// <summary> /// 获取所有分组 /// </summary> /// <param name="access_token"></param> /// <returns> /// { /// "errcode": 0, /// "errmsg": "success", /// "groups_detail": [ /// { /// "group_id": 200077549, /// "group_name": "最新上架" /// }, /// { /// "group_id": 200079772, /// "group_name": "全球热卖" /// } /// ] /// } /// </returns> public static string GetAll(string access_token) { var result = HttpTo.Get(string.Format("https://api.weixin.qq.com/merchant/group/getall?access_token={0}", access_token)); return(result); }