コード例 #1
0
        /// <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);
        }
コード例 #2
0
ファイル: Merchant.cs プロジェクト: Jackjet/Netnr.WeChat
        /// <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);
        }
コード例 #3
0
ファイル: SecApi.cs プロジェクト: Jackjet/Netnr.WeChat
            /// <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);
            }
コード例 #4
0
ファイル: Semantic.cs プロジェクト: Jackjet/Netnr.WeChat
            /// <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);
            }
コード例 #5
0
        /// <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);
        }
コード例 #6
0
ファイル: Card.cs プロジェクト: Jackjet/Netnr.WeChat
        /// <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);
        }
コード例 #7
0
        /// <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);
        }
コード例 #8
0
ファイル: Merchant.cs プロジェクト: Jackjet/Netnr.WeChat
        /// <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);
        }
コード例 #9
0
ファイル: Merchant.cs プロジェクト: Jackjet/Netnr.WeChat
        /// <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);
        }