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 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); }