public void Test4() { var data = "{}";//json请求数据 var request = new AlipayData(); request.FromJson(data); var config = new AlipayConfig { NotifyUrl = "", AppId = "", PrivateKey = "", AliPublicKey = "", QuitUrl = "" }; var response = AlipayClient.Notify(request, config); if (string.IsNullOrEmpty(response.OutTradeNo)) { Assert.Fail(); } else { Assert.Pass(); } }
public AlipayData Query(string id, OrderType outTradeNo) { AlipayTradeQueryRequest request = new AlipayTradeQueryRequest(); var requstData = "{\"" + (outTradeNo == OrderType.OutTradeNo ? "out_trade_no" : "trade_no") + "\":\"" + id + "\"}"; //string.Format(, outTradeNo == OrderType.OutTradeNo ? "out_trade_no" : "trade_no",id); request.BizContent = requstData; var response = _aopClient.Execute(request); var alipayData = new AlipayData(); if (response.IsError) { LogHelper.Logger.Error("查询订单失败:" + response.Msg + "," + response.SubMsg); if (response.Code == "40004") { alipayData.SetValue("trade_status", "NOPAY"); alipayData.SetValue(outTradeNo == OrderType.OutTradeNo ? "out_trade_no" : "trade_no", id); return(alipayData); } throw new Exception("查询订单失败,原因" + response.Msg); } alipayData.SetValue("trade_status", response.TradeStatus); alipayData.SetValue("trade_no", response.TradeStatus); alipayData.SetValue("out_trade_no", response.OutTradeNo); alipayData.SetValue("buyer_logon_id", response.BuyerLogonId); alipayData.SetValue("total_amount", response.TotalAmount); alipayData.SetValue("receipt_amount", response.ReceiptAmount); alipayData.SetValue("buyer_pay_amount", response.BuyerPayAmount); return(alipayData); }
/// <summary> /// 支付成功回调 /// </summary> /// <param name="request"></param> /// <param name="config"></param> /// <returns></returns> public static AlipayNotifyResponse Notify(AlipayData request, AlipayConfig config) { var response = request.ToObject <AlipayNotifyResponse>(); //签名校验 if (!AlipaySignature.RSACheckV1(request.GetValues(), config.AliPublicKey, response.Charset, response.SignType, config.KeyFromFile)) { throw new Exception("签名校验失败"); } return(response); }
public bool AlipayCallBack(AlipayData alipayData) { var userPayInfo = _uerPayOrderInfoRepository.Get(alipayData.GetValue("out_trade_no")); if (userPayInfo == null) { LogHelper.Logger.Error(string.Format("数据库中不存在单号为{0}的订单", alipayData.GetValue("out_trade_no"))); return(false); } if (!VerifyOrder(alipayData, userPayInfo)) { return(false); } var tradeStatus = alipayData.GetValue("trade_status"); var transactionId = string.Empty; if (alipayData.IsSet("trade_no")) { transactionId = alipayData.GetValue("trade_no"); } if (tradeStatus.Equals("TRADE_SUCCESS") || tradeStatus.Equals("TRADE_FINISHED")) { //支付金额 return(_purchaseServiceRepository.CompleteServiceOrder(new CompleteServiceOrder() { OrderID = alipayData.GetValue("out_trade_no"), Cost = Convert.ToDouble(alipayData.GetValue("invoice_amount")), NewID = OrderHelper.GenerateNewId(), PayExtendInfo = alipayData.ToJson(), PayState = tradeStatus, PayOrderID = transactionId, Remarks = "支付宝手机网页支付", }) == 0); } //超时关闭 else if (tradeStatus.Equals("TRADE_CLOSED")) { LogHelper.Logger.Debug("订单超时关闭"); return(_purchaseServiceRepository.UpdateServiceOrder(new UpdateServiceOrder() { ID = alipayData.GetValue("out_trade_no"), PayExtendInfo = alipayData.ToJson(), PayState = tradeStatus, PayOrderID = transactionId, State = 3, }) == 0); } else { return(false); } }
public PaymentStatusResponse checkStatus(PaymentRequest request) { PaymentStatusResponse result = new PaymentStatusResponse(); if (request == null || request.Id == default(Guid) || this.Setting == null) { return(result); } try { var dic = new AopDictionary(); dic.Add("out_trade_no", request.Id.ToString("N")); var response = AlipayApi.Query(dic, this.Setting); var data = new AlipayData(); var res = data.FromJson(response, Setting); var trade_state = res["trade_status"]; //交易状态:WAIT_BUYER_PAY(交易创建,等待买家付款)、TRADE_CLOSED(未付款交易超时关闭,或支付完成后全额退款)、TRADE_SUCCESS(交易支付成功)、TRADE_FINISHED(交易结束,不可退款) if (trade_state != null) { result.HasResult = true; var code = trade_state.ToString().ToUpper(); if (code == "TRADE_SUCCESS" || code == "TRADE_FINISHED") { result.Status = PaymentStatus.Paid; } else if (code == "TRADE_CLOSED") { result.Status = PaymentStatus.Cancelled; } else if (code == "WAIT_BUYER_PAY") { result.Status = PaymentStatus.Pending; } } } catch (Exception ex) { Kooboo.Data.Log.Instance.Exception.WriteException(ex); } return(result); }
private bool VerifyOrder(AlipayData alipayData, UserPayOrderInfo payOrder) { if (Convert.ToDecimal(alipayData.GetValue("invoice_amount")) != payOrder.Cost) { LogHelper.Logger.Error("用户支付的金额与订单预付款金额不一致,交易失败"); return(false); } if (!AliPayConfig.PID.Equals(alipayData.GetValue("seller_id"))) { LogHelper.Logger.Error("seller_id不一致,交易失败"); return(false); } if (!AliPayConfig.APPID.Equals(alipayData.GetValue("app_id"))) { LogHelper.Logger.Error("app_id不一致,交易失败"); return(false); } return(true); }
public HttpResponseMessage WapPay() { LogHelper.Logger.Debug("回调支付宝支付接口"); var response = Request.CreateResponse(HttpStatusCode.OK); var alipayData = new AlipayData(); foreach (var key in HttpContext.Current.Request.Form.AllKeys) { alipayData.SetValue(key, HttpContext.Current.Request.Form[key]); } var signVerify = alipayData.SignVerified(); if (!signVerify) { Logger.Error("签名失败,这可能是假冒的回调"); response.Content = new StringContent("fail", Encoding.UTF8, "text/html"); return(response); } response.Content = _alipayPurchaseService.AlipayCallBack(alipayData) ? new StringContent("success", Encoding.UTF8, "text/html") : new StringContent("fail", Encoding.UTF8, "text/html"); return(response); }
public IPaymentResponse Charge(PaymentRequest request) { if (Setting == null) { return(null); } var biz = new AopDictionary(); biz.Add("subject", request.Name); biz.Add("out_trade_no", request.Id.ToString("N")); biz.Add("total_amount", Math.Round(request.TotalAmount, 2)); var sys = new AopDictionary(); sys.Add("method", "alipay.trade.app.pay"); sys.Add("format", "json"); sys.Add("version", "1.0"); sys.Add("charset", "UTF-8"); sys.Add("sign_type", Setting.SignType); sys.Add("app_id", Setting.APPId); sys.Add("timestamp", DateTime.UtcNow.AddHours(8).ToString("yyyy-MM-dd HH:mm:ss")); sys.Add("alipay_sdk", "alipay-easysdk-net-2.0.0"); sys.Add("biz_content", JsonHelper.Serialize(biz)); sys.Add("notify_url", PaymentHelper.GetCallbackUrl(this, nameof(Notify), Context)); var data = new AlipayData(); var sign = data.RSASign(sys, Setting.PrivateKey, "UTF-8", Setting.SignType); sys.Add("sign", sign); return(new StringResponse { requestId = request.Id, Content = BuildQueryString(sys) }); }
public PaymentCallback Notify(RenderContext context) { var dic = GetRequestPost(context); if (dic.Count > 0) { var data = new AlipayData(); bool signVerified = data.RSACheckV1(dic, this.Setting.PublicKey, this.Setting.Charset); //调用SDK验证签名 if (signVerified) { var strPaymentRequestId = context.Request.GetValue("out_trade_no"); Guid paymentRequestId; if (Guid.TryParse(strPaymentRequestId, out paymentRequestId)) { var paymentRequest = PaymentManager.GetRequest(paymentRequestId, context); decimal totalAmount = 0;//total amount decimal.TryParse(context.Request.Get("total_amount"), out totalAmount); var subject = context.Request.Get("subject"); var paymentStatus = context.Request.Get("trade_status"); if (paymentRequest == null || this.Setting == null) { return(null); } var callback = new PaymentCallback() { RequestId = paymentRequestId, }; if (totalAmount == Math.Round(paymentRequest.TotalAmount, 2) || subject == paymentRequest.Name) { if (paymentStatus == TradeStatus.TRADE_CLOSED) { callback.Status = PaymentStatus.Cancelled; } else if (paymentStatus == TradeStatus.TRADE_SUCCESS || paymentStatus == TradeStatus.TRADE_FINISHED) { callback.Status = PaymentStatus.Paid; } else if (paymentStatus == TradeStatus.WAIT_BUYER_PAY) { callback.Status = PaymentStatus.Pending; } } else { callback.Status = PaymentStatus.NotAvailable; //怎么让kooboo的前端打印输出“fail” } return(callback); } else { return(null); //怎么让kooboo的前端打印输出“fail” } } } return(null); }
public PaymentStatusResponse checkStatus(PaymentRequest request) { PaymentStatusResponse result = new PaymentStatusResponse(); if (request == null || request.Id == default(Guid) || this.Setting == null) { return(result); } try { var biz = new AopDictionary(); biz.Add("out_trade_no", request.Id.ToString("N")); var dic = new AopDictionary(); dic.Add("app_id", Setting.APPId); dic.Add("method", "alipay.trade.query"); dic.Add("charset", "utf-8"); dic.Add("alipay_sdk", "alipay-easysdk-net-2.0.0"); dic.Add("sign_type", Setting.SignType); dic.Add("timestamp", DateTime.UtcNow.AddHours(8).ToString("yyyy-MM-dd HH:mm:ss")); dic.Add("version", "1.0"); dic.Add("biz_content", JsonHelper.Serialize(biz)); var data = new AlipayData(); var sign = data.RSASign(dic, Setting.PrivateKey, "UTF-8", Setting.SignType); dic.Add("sign", sign); var response = HttpService.DoPost(Setting.ServerUrl, dic, "UTF-8"); var jobject = JsonHelper.Deserialize <JObject>(response); var rsaCheckContent = AlipaySignature.RSACheckContent(AlipayData.GetSignSourceData(response), jobject.Value <string>("sign"), Setting.PublicKey, "UTF-8", Setting.SignType); if (!rsaCheckContent) { throw new AliPayException("sign check fail: check Sign and Data Fail!"); } var res = jobject["alipay_trade_query_response"]; var trade_state = res["trade_status"]; //交易状态:WAIT_BUYER_PAY(交易创建,等待买家付款)、TRADE_CLOSED(未付款交易超时关闭,或支付完成后全额退款)、TRADE_SUCCESS(交易支付成功)、TRADE_FINISHED(交易结束,不可退款) if (trade_state != null) { result.HasResult = true; var code = trade_state.ToString().ToUpper(); if (code == "TRADE_SUCCESS" || code == "TRADE_FINISHED") { result.Status = PaymentStatus.Paid; } else if (code == "TRADE_CLOSED") { result.Status = PaymentStatus.Cancelled; } else if (code == "WAIT_BUYER_PAY") { result.Status = PaymentStatus.Pending; } } } catch (Exception ex) { Kooboo.Data.Log.Instance.Exception.WriteException(ex); } return(result); }