Exemplo n.º 1
0
        public async Task <PaymentResponse> CreateAsync(PaymentRequest request)
        {
            var          key      = Convert.FromBase64String(_options.JdPay.Key);
            SettleObject inputObj = new SortedDictionary <string, object>();

            inputObj.SetValue("version", "V2.0");
            inputObj.SetValue("merchant", _options.JdPay.Merchant);
            inputObj.SetValue("tradeNum", request.OrderId);
            inputObj.SetValue("tradeName", request.Subject);
            inputObj.SetValue("tradeTime", DateTime.Now.ToString("yyyyMMddHHmmss", DateTimeFormatInfo.InvariantInfo));
            inputObj.SetValue("amount", request.Amount.ToString());
            inputObj.SetValue("orderType", "1");
            inputObj.SetValue("currency", "CNY");
            inputObj.SetValue("callbackUrl", _options.ShowUrl);
            inputObj.SetValue("notifyUrl", _options.JdPay.PayNotifyUrl);
            inputObj.SetValue("userId", request.OpenId);
            inputObj.SetValue("sign", MakeSign(inputObj));
            var signedData = inputObj.GetValues().ToDictionary(x => x.Key, x => x.Value);
            await Task.Run(() =>
            {
                foreach (var obj in signedData)
                {
                    if (obj.Key == "version" || obj.Key == "merchant" || obj.Key == "sign")
                    {
                        continue;
                    }
                    inputObj.SetValue(obj.Key, SecretUtil.Des3EncryptEcb(key, obj.Value.ToString()));
                }
            });

            var res = new PaymentResponse(request.OrderId)
            {
                Url  = _options.JdPay.Gateway,
                Data = inputObj.ToUrl()
            };

            return(res);
        }