public AlipayF2FPayResult tradePay(AlipayTradePayContentBuilder builder) { AlipayF2FPayResult payResult = new AlipayF2FPayResult(); try { AlipayTradePayRequest payRequest = new AlipayTradePayRequest(); payRequest.BizContent = builder.BuildJson(); AlipayTradePayResponse payResponse = client.Execute(payRequest); //payRequest.SetBizModel(""); if (payResponse != null) { switch (payResponse.Code) { case ResultCode.SUCCESS: break; //返回支付处理中,需要进行轮询 case ResultCode.INRROCESS: AlipayTradeQueryResponse queryResponse = LoopQuery(builder.out_trade_no, 10, 3000); //用订单号trade_no进行轮询也是可以的。 //轮询结束后还是支付处理中,需要调撤销接口 if (queryResponse != null) { if (queryResponse.TradeStatus == "WAIT_BUYER_PAY") { CancelAndRetry(builder.out_trade_no); payResponse.Code = ResultCode.FAIL; } payResponse = toTradePayResponse(queryResponse); } break; //明确返回业务失败 case ResultCode.FAIL: break; //返回系统异常,需要调用一次查询接口,没有返回支付成功的话调用撤销接口撤销交易 case ResultCode.ERROR: AlipayTradeQueryResponse queryResponse2 = sendTradeQuery(builder.out_trade_no); if (queryResponse2 != null) { if (queryResponse2.TradeStatus == TradeStatus.WAIT_BUYER_PAY) { AlipayTradeCancelResponse cancelResponse = CancelAndRetry(builder.out_trade_no); payResponse.Code = ResultCode.FAIL; } payResponse = toTradePayResponse(queryResponse2); } break; default: payResult.response = payResponse; break; } payResult.response = payResponse; return(payResult); } else { AlipayTradeQueryResponse queryResponse3 = sendTradeQuery(builder.out_trade_no); if (queryResponse3 != null) { if (queryResponse3.TradeStatus == TradeStatus.WAIT_BUYER_PAY) { AlipayTradeCancelResponse cancelResponse = CancelAndRetry(builder.out_trade_no); payResponse.Code = ResultCode.FAIL; } payResponse = toTradePayResponse(queryResponse3); } payResult.response = payResponse; return(payResult); } //return payResult; } catch (Exception e) { AlipayTradePayResponse payResponse = new AlipayTradePayResponse(); payResponse.Code = ResultCode.FAIL; payResponse.Body = e.Message; payResult.response = payResponse; return(payResult); } }
/// <summary> /// 直接付款,适合条码支付 /// </summary> /// <param name="parameter"></param> public virtual string StartPay(PayParameter parameter) { if (parameter.AuthCode.IsNullOrEmpty()) { throw new Exception("条码为空"); } if (parameter.TradeID.IsNullOrEmpty()) { throw new Exception("交易编号为空"); } try { Config config = new Config(PayFactory.GetInterfaceXmlConfig(PayInterfaceType.AlipayBarcode, parameter.TradeID)); //创建提交的内容 AlipayTradePayContentBuilder builder = BuildPayContent(config, parameter); var client = config.AppConfig.CreateAopClient(); AlipayTradePayRequest payRequest = new AlipayTradePayRequest(); payRequest.BizContent = builder.BuildJson(); AlipayTradePayResponse payResponse = client.Execute(payRequest); PayFactory.OnLog(parameter.TradeID, payResponse.Body); string[] errorCodes = new string[] { "20000", "20001", "40001", "40002", "40003", "40004", "40006" };//明确一定是错误的代码 if (errorCodes.Contains(payResponse.Code)) { PayFactory.OnPayFailed(parameter.TradeID, payResponse.SubMsg, payResponse.Body); } else if (payResponse.Code == ResultCode.SUCCESS) { PayFactory.OnPaySuccessed(parameter.TradeID, payResponse.Body); } else { //到这里,不能确定支付结果,循环30秒确定 int checkTimes = parameter.Timeout / 2; Thread.Sleep(1000); for (int i = 0; i < checkTimes; i++) { if (checkPayStateByConfig(parameter, config)) { break; } if (i + 1 == checkTimes) { break; } Thread.Sleep(2000); } } } catch (Exception ex) { } return(null); }