Esempio n. 1
0
        /// <summary>
        /// 快捷支付签约
        /// </summary>
        /// <param name="req"></param>
        /// <returns></returns>
        /// <exception cref="BizException"></exception>

        public async Task <ExpressContractedClientRsp> ExpressContractAsync(TypeVItem req)
        {
            req.NotNull("请求参数");
            debugInfo.Info($"快捷签约:{req.ToJsonString()}");
            req.Card.NotNull("卡信息");
            req.Trade.NotNull("交易信息");
            var card = req.Card;

            card.Bank.NotNull("持卡人支付卡号发卡行");
            card.Type.EnumValueValid("持卡人支付卡号卡类型");
            card.No.NotNull("持卡人支付卡号");
            card.Name.NotNull("持卡人姓名");
            card.IdType.NotNull("持卡人证件类型");
            card.IdNo.NotNull("持卡人证件号");
            card.Phone.NotNull("持卡人手机号");

            var trade = req.Trade;

            trade.Type.ShouldBe("V", "交易类型");
            trade.Id.NotNull("交易号");
            trade.Id.NotTooLong(30, "交易号");
            trade.Amount.DecimalValid("交易金额");
            trade.Currency.ShouldBe("CNY", "交易币种");

            var xmlData      = JdHelper.GetTypeVXml(req);
            var desEncrypted = JdHelper.DesEncrypt(xmlData, jdConfig.DesKey);
            var sign         = JdHelper.Md5(jdConfig.Version, jdConfig.Merchant, jdConfig.Terminal, desEncrypted,
                                            jdConfig.Md5Key);
            var xml = JdHelper.CreateChinaBank(jdConfig.Version, jdConfig.Merchant, jdConfig.Terminal, desEncrypted,
                                               sign);
            var base64EncodedStr = JdHelper.Base64Encode(xml);
            var reqModel         = new HttpReqModel()
            {
                Method  = "post",
                ReqBody = new Dictionary <string, string>()
                {
                    { "req", base64EncodedStr },
                    { "charset", "utf-8" }
                },
                Url = jdConfig.FastPayUrl
            };
            var rspStr = await HttpHelper.GetResultAsync <string>(reqModel);

            var content = rspStr.Substring(rspStr.IndexOf('=') + 1);

            debugInfo.Info($"快捷签约返回原文:{rspStr}");
            var rsp = await ParseExpresssContractAsync(content);

            debugInfo.Info($"快捷签约解析:{rsp.ToJsonString()}");
            return(rsp);
        }