Beispiel #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="o"></param>
        /// <returns></returns>
        public CardSynchCallBack CardSend(CardOrderSummitArgs o)
        {
            var callBack = new CardSynchCallBack();
            var channel  = GetChannelInfo(o.CardTypeId, o.CardNo);

            if (string.IsNullOrEmpty(channel.PayChannel))
            {
                callBack.SuppErrorCode = "-1";
                callBack.SuppErrorMsg  = "不支持的卡种";

                callBack.Message = "不支持的卡种";
                return(callBack);
            }

            ReceB2COrderResponse raceResponse = ReceiveB2COrderRep(o.SysOrderNo, o.SysOrderNo, o.FaceValue);

            if (raceResponse == null || raceResponse.transStatus != "00")
            {
                callBack.SuppErrorCode = "-1";
                callBack.SuppErrorMsg  = "下单失败";

                callBack.Message = "下单失败";
                return(callBack);
            }

            b2CPaymentResponse b2CPayment = Payment(raceResponse.tokenId, raceResponse.sessionId, o.SysOrderNo, o.CardNo,
                                                    o.CardPass, o.CardTypeId, o.FaceValue);

            if (b2CPayment == null)
            {
                callBack.SuppErrorCode = "-1";
                callBack.SuppErrorMsg  = "支付失败";

                callBack.Message = "支付失败";
                return(callBack);
            }

            callBack.Success       = 1;
            callBack.SuppErrorCode = b2CPayment.returnInfo.errorCode;
            callBack.SuppErrorMsg  = b2CPayment.returnInfo.errorMsg;
            callBack.SuppTransNo   = b2CPayment.transNo;

            //if (b2CPayment.transStatus == "00"
            //    && string.IsNullOrEmpty(b2CPayment.returnInfo.errorCode))
            //{
            //    callBack.SummitStatus = 1;
            //}

            //if (b2CPayment.transStatus == "01")
            //{
            //    callBack.SummitStatus = 1;

            //    if (o.CardTypeId == 104
            //        || o.CardTypeId == 210)
            //    {
            //        callBack.OrderStatus  = 2;
            //    }
            //}

            if (!string.IsNullOrEmpty(b2CPayment.returnInfo.errorCode))
            {
                callBack.SummitStatus = 0;
                callBack.OrderStatus  = 0;
            }
            else
            {
                if (b2CPayment.transStatus == "00")
                {
                    callBack.SummitStatus = 1;
                }
                if (b2CPayment.transStatus == "01")
                {
                    callBack.SummitStatus = 1;

                    if (o.CardTypeId == 104 ||
                        o.CardTypeId == 210)
                    {
                        decimal paidAmount = 0M;

                        if (decimal.TryParse(b2CPayment.paidAmount, out paidAmount))
                        {
                            callBack.OrderStatus = 2;
                            callBack.SuccAmt     = paidAmount;
                        }
                    }
                }
            }

            return(callBack);
        }
Beispiel #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="tokenId"></param>
        /// <param name="sessionId"></param>
        /// <param name="orderid"></param>
        /// <param name="cardno"></param>
        /// <param name="cardpwd"></param>
        /// <param name="typeId"></param>
        /// <param name="cardvalue"></param>
        /// <returns></returns>
        public b2CPaymentResponse Payment(string tokenId, string sessionId, string orderid, string cardno, string cardpwd, int typeId, int cardvalue)
        {
            var channel = GetChannelInfo(typeId, cardno);

            sender send = new sender();

            send.senderId = SenderId;

            service ser = new service();

            ser.serviceCode = "B2CPayment";
            ser.version     = "V4.1.1.1.1";

            header head = new header();

            head.service = ser;
            head.charset = "UTF-8";
            //网关跟踪号, 保证唯一
            head.traceNo  = orderid;
            head.sender   = send;
            head.sendTime = DateTime.Now.ToString("yyyyMMddhhmmss");

            b2COrder ord = new b2COrder();

            ord.orderAmoumt = cardvalue.ToString();
            ord.orderType   = "OT001";
            ord.transNo     = orderid;

            paymentItem ipitem = new paymentItem();

            ipitem.key   = "PAYER_IP";
            ipitem.value = "127.0.0.1";


            /*
             * 游戏卡:卡号_密码_面值@@卡号_密码_面值, 多卡用@@分隔
             * 盛付通卡:卡号_密码@@卡号_密码, 多卡用@@分隔
             */
            paymentItem carditem = new paymentItem();

            carditem.key = "CARD_INFO";
            //carditem.value = "2013091100005018_111111_10@@2013091100005019_111111_10"
            if (channel.PayChannel == "03" ||
                channel.PayChannel == "31" ||
                channel.PayChannel == "42")
            {
                carditem.value = string.Format("{0}_{1}", cardno, cardpwd);
            }
            else
            {
                carditem.value = string.Format("{0}_{1}_{2}", cardno, cardpwd, cardvalue);
            }


            paymentItem[] paymentItems = new paymentItem[2] {
                ipitem, carditem
            };

            /*
             #region 游戏卡
             * b2CPayment payment = new b2CPayment();
             * //支付渠道, (商户根据实际情况自行更改), 具体代码含义详见文档
             * payment.paymentType = "";
             * payment.instCode = "";
             * payment.payChannel = "61";
             * payment.paymentItems = paymentItems;
             #endregion
             * */

            #region 盛付通卡
            b2CPayment payment = new b2CPayment();
            //支付渠道, (商户根据实际情况自行更改), 具体代码含义详见文档
            payment.paymentType  = channel.PaymentType;
            payment.instCode     = channel.InstCode;
            payment.payChannel   = channel.PayChannel;
            payment.paymentItems = paymentItems;
            #endregion

            extension ext = new extension();
            ext.ext1 = "";
            ext.ext2 = "";

            signature sig = new signature();
            sig.signMsg  = "";
            sig.signType = "MD5";

            b2CPayer payer = new b2CPayer();
            payer.ptId          = "";
            payer.ptIdType      = memberIdType.PT_ID;
            payer.sdId          = "";
            payer.memberId      = "";
            payer.accountId     = "";
            payer.accountType   = "";
            payer.payableAmount = "";
            payer.payableFee    = "";

            b2CPayee payee = new b2CPayee();
            payee.ptId             = "";
            payee.sdId             = "";
            payee.memberId         = "";
            payee.accountId        = "";
            payee.accountType      = "";
            payee.receivableAmount = "";
            payee.receivableFee    = "";

            b2CPaymentRequest request = new b2CPaymentRequest();
            request.header    = head;
            request.order     = ord;
            request.payer     = payer;
            request.payee     = payee;
            request.payment   = payment;
            request.tokenId   = tokenId;
            request.sessionId = sessionId;// Guid.NewGuid().ToString("N");
            request.extension = ext;
            request.signature = sig;

            //签名字符串拼接
            string sign = ser.serviceCode + ser.version
                          + head.charset + head.traceNo + send.senderId + head.sendTime
                          + ord.transNo + ord.orderAmoumt + ord.orderType
                          + payer.ptId + payer.ptIdType + payer.sdId + payer.memberId
                          + payer.accountId + payer.accountType + payer.accountType
                          + payer.payableAmount + payer.payableFee
                          + payee.ptId + payee.sdId + payee.memberId
                          + payee.accountId + payee.accountType + payee.accountType
                          + payee.receivableAmount + payee.receivableFee
                          + payment.paymentType + payment.instCode + payment.payChannel;

            for (int i = 0; i < paymentItems.Length; i++)
            {
                sign += paymentItems[i].key + paymentItems[i].value;
            }
            sign += request.tokenId + request.sessionId
                    + ext.ext1 + ext.ext2 + sig.signType + MerchantKey;

            sig.signMsg       = Cryptography.MD5(sign);
            request.signature = sig;


            try
            {
                PaymentAPIExporterService service  = new PaymentAPIExporterService();
                b2CPaymentResponse        response = service.processB2CPay(request);


                //viviLib.Logging.LogHelper.Write("pay" + response.transStatus);
                return(response);
            }
            catch (Exception exception)
            {
                //viviLib.Logging.LogHelper.Write("pay exception" + exception.Message);
                viviLib.ExceptionHandling.ExceptionHandler.HandleException(exception);
            }
            return(null);
        }