Beispiel #1
0
        /// <summary>
        /// 生成APP支付订单信息
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public async Task <ResultDto> GetPayInfo(GetPayInfoInput input)
        {
            var request = new AlipayTradeAppPayRequest();
            //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
            var model = new AlipayTradeAppPayModel();

            model.Body           = "报名费用。";
            model.Subject        = "报名缴费";
            model.TotalAmount    = "0.00";
            model.ProductCode    = "QUICK_MSECURITY_PAY";
            model.OutTradeNo     = "123456";
            model.TimeoutExpress = "15m";
            request.SetNotifyUrl(ServerPath + "/Handlers/AlipayNotify.ashx");
            request.SetBizModel(model);
            //这里和普通的接口调用不同,使用的是sdkExecute
            var response = _client.SdkExecute(request);

            //HttpUtility.HtmlEncode是为了输出到页面时防止被浏览器将关键参数html转义,实际打印到日志以及http传输不会有这个问题
            return(new ResultDto {
                Code = 0, Message = "生成APP支付订单信息", Data = HttpUtility.HtmlEncode(response.Body).Replace("amp;", "")
            });
        }
        /// <summary>
        /// 生成APP支付订单信息
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public async Task <ResultDto> GetPayInfo(GetPayInfoInput input)
        {
            var requestHandler = new RequestHandler();

            //微信开放平台审核通过的应用APPID
            requestHandler.SetParameter("appid", _tenPayV3Info.AppId);
            //微信支付分配的商户号
            requestHandler.SetParameter("mch_id", _tenPayV3Info.MchId);
            //终端设备号(门店号或收银设备ID),默认请传"WEB"
            requestHandler.SetParameter("device_info", "WEB");
            //随机字符串,不长于32位。推荐随机数生成算法
            requestHandler.SetParameter("nonce_str", TenPayV3Util.GetNoncestr());
            //签名,详见签名生成算法
            //requestHandler.SetParameter("sign", "");
            //签名类型,目前支持HMAC-SHA256和MD5,默认为MD5
            //requestHandler.SetParameter("sign_type", "MD5");
            //商品描述交易字段格式根据不同的应用场景按照以下格式:APP——需传入应用市场上的APP名字 - 实际商品名称,天天爱消除 - 游戏充值。
            requestHandler.SetParameter("body", "报名费用。");
            //商品详细列表,使用Json格式,传输签名前请务必使用CDATA标签将JSON文本串保护起来。goods_detail 服务商必填[]:└ goods_id String 必填 32 商品的编号└ wxpay_goods_id String 可选 32 微信支付定义的统一商品编号└ goods_name String 必填 256 商品名称└ quantity Int 必填 商品数量└ price Int 必填 商品单价,单位为分└ goods_category String 可选 32 商品类目ID└ body String 可选 1000 商品描述信息
            //requestHandler.SetParameter("detail", json);
            //附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据
            requestHandler.SetParameter("attach", "");
            //商户系统内部订单号,要求32个字符内,只能是数字、大小写字母_-|*@ ,且在同一个商户号下唯一。详见商户订单号
            requestHandler.SetParameter("out_trade_no", "123456");
            //符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型
            //requestHandler.SetParameter("fee_type", "CNY");
            //订单总金额,单位为分,详见支付金额
            requestHandler.SetParameter("total_fee", "100");
            //用户端实际ip
            if (string.IsNullOrWhiteSpace(input.SpbillCreateIp))
            {
                requestHandler.SetParameter("spbill_create_ip", HostAddressHelper.GetHostAddress());
            }
            else
            {
                requestHandler.SetParameter("spbill_create_ip", input.SpbillCreateIp);
            }
            //订单生成时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。其他详见时间规则
            requestHandler.SetParameter("time_start", DateTime.Now.ToString("yyyyMMddHHmmss"));
            //订单失效时间,格式为yyyyMMddHHmmss,如2009年12月27日9点10分10秒表示为20091227091010。其他详见时间规则 注意:最短失效时间间隔必须大于5分钟
            requestHandler.SetParameter("time_expire", DateTime.Now.AddMinutes(15).ToString("yyyyMMddHHmmss"));
            //订单优惠标记,代金券或立减优惠功能的参数,说明详见代金券或立减优惠
            //requestHandler.SetParameter("goods_tag", "WXG");
            //接收微信支付异步通知回调地址,通知url必须为直接可访问的url,不能携带参数。
            requestHandler.SetParameter("notify_url", _tenPayV3Info.TenPayV3Notify);
            Logger.Debug("WeChatPay-GetPayInfo-notify_url-" + _tenPayV3Info.TenPayV3Notify);
            //支付类型
            requestHandler.SetParameter("trade_type", "APP");
            //no_credit--指定不能使用信用卡支付
            //requestHandler.SetParameter("limit_pay", "no_credit");
            //设置KEY
            requestHandler.SetKey(_tenPayV3Info.Key);

            var    sign = requestHandler.CreateMd5Sign();
            string data = requestHandler.ParseXML(sign);

            requestHandler.GetDebugInfo();
            Logger.Debug("WeChatPay-GetPayInfo-xml-" + data);
            var result = await TenPayV3.UnifiedorderAsync(data);

            var tenPayV3Result = XmlHelper.WxXmlToObject <TenPayV3Result>(result);

            if (tenPayV3Result.return_code == "SUCCESS")
            {
                var unifiedorderResult = XmlHelper.WxXmlToObject <UnifiedorderResult>(result);
                var tenPayV3App        = new TenPayV3App();
                tenPayV3App.appid        = unifiedorderResult.appid;
                tenPayV3App.partnerid    = unifiedorderResult.mch_id;
                tenPayV3App.prepayid     = unifiedorderResult.prepay_id;
                tenPayV3App.package      = "Sign=WXPay";
                tenPayV3App.packageValue = "Sign=WXPay";
                tenPayV3App.noncestr     = TenPayV3Util.GetNoncestr();
                tenPayV3App.timestamp    = TenPayV3Util.GetTimestamp();
                var handler = new RequestHandler();
                handler.SetParameter("appid", tenPayV3App.appid);
                handler.SetParameter("partnerid", tenPayV3App.partnerid);
                handler.SetParameter("prepayid", tenPayV3App.prepayid);
                handler.SetParameter("package", tenPayV3App.package);
                handler.SetParameter("noncestr", tenPayV3App.noncestr);
                handler.SetParameter("timestamp", tenPayV3App.timestamp);
                handler.SetKey(_tenPayV3Info.Key);
                tenPayV3App.sign = handler.CreateMd5Sign();
                return(new ResultDto {
                    Code = 0, Message = "生成APP支付订单信息", Data = tenPayV3App
                });
            }

            return(new ResultDto {
                Code = 10, Message = tenPayV3Result.return_msg
            });
        }