/// <summary> /// 查询对账单下载地址 /// </summary> /// <param name="request">提交给关闭订单API的参数</param> /// <param name="config"></param> /// <param name="accessToken">用户授权token</param> /// <param name="timeOut">接口超时时间</param> /// <returns>成功时返回,其他抛异常</returns> public static async Task <AlipayDataDataserviceBillDownloadurlQueryResponse> DownloadBillAsync(AlipayDataDataserviceBillDownloadurlQueryModel request, AlipayConfig config, string accessToken = null, int timeOut = 6) { IAopClient client = new AopClient(AlipayConstants.GATEWAYURL, config.AppId, config.PrivateKey, config.Format, config.Version, config.SignType, config.AliPublicKey, config.Charset, config.KeyFromFile); var requestData = new AlipayDataDataserviceBillDownloadurlQueryRequest(); requestData.SetBizModel(request); var result = await client.ExecuteAsync(requestData, accessToken); if (result.Code != AlipayConstants.SuccessCode) { throw new Exception(result.SubMsg); } return(result); }
protected void WriteLog(AlipayConfig config, AlipayParameterBuilder builder, AlipayResult result) { }
/// <summary> /// 查询订单 /// </summary> /// <param name="request">提交给查询订单API的参数</param> /// <param name="config"></param> /// <param name="accessToken">用户授权token</param> /// <param name="timeOut">超时时间</param> /// <returns>成功时返回订单查询结果,其他抛异常</returns> public static async Task <AlipayTradeQueryResponse> OrderQueryAsync(AlipayTradeQueryModel request, AlipayConfig config, string accessToken = null, int timeOut = 6) { IAopClient client = new AopClient(AlipayConstants.GATEWAYURL, config.AppId, config.PrivateKey, config.Format, config.Version, config.SignType, config.AliPublicKey, config.Charset, config.KeyFromFile); var requestData = new AlipayTradeQueryRequest(); requestData.SetBizModel(request); return(await client.ExecuteAsync(requestData, accessToken)); }
public WXPayBack ProcessNotify(bool isApp) { WXPayBack result = new WXPayBack() { ResultCode = 0, Msg = "获取请求成功" }; SortedDictionary <string, object> paras; WxPayData notifyData = GetNotifyData(out paras); //string str = "WX支付异步返回成功"; //foreach (var item in paras) //{ // str += string.Format("{0}={1},", item.Key, item.Value); //} //str.WriteLog(); //检查支付结果中transaction_id是否存在 if (!notifyData.IsSet("transaction_id")) { //若transaction_id不存在,则立即返回结果给微信支付后台 WxPayData res = new WxPayData(); res.SetValue("return_code", "FAIL"); res.SetValue("return_msg", "支付结果中微信订单号不存在"); Log.Error(this.GetType().ToString(), "The Pay result is error : " + res.ToXml()); page.Response.Write(res.ToXml()); //page.Response.End(); result.SetPara(-1, "", "", "支付结果中微信订单号不存在"); return(result); } string transaction_id = notifyData.GetValue("transaction_id").ToString(); //查询订单,判断订单真实性 if (!QueryOrder(transaction_id, true)) { //若订单查询失败,则立即返回结果给微信支付后台 WxPayData res = new WxPayData(); res.SetValue("return_code", "FAIL"); res.SetValue("return_msg", "订单查询失败"); Log.Error(this.GetType().ToString(), "Order query failure : " + res.ToXml()); page.Response.Write(res.ToXml()); //page.Response.End(); result.SetPara(-2, "", "", "订单查询失败"); } //查询订单成功 else { WxPayData res = new WxPayData(); res.SetValue("return_code", "SUCCESS"); res.SetValue("return_msg", "OK"); Log.Info(this.GetType().ToString(), "order query success : " + res.ToXml()); page.Response.Write(res.ToXml()); //page.Response.End(); result.SetPara(1, paras["attach"].ToString(), AlipayConfig.MoneyFormatDco(paras["total_fee"].ToString()).ToString(), "查询订单成功"); string.Format("dingdanhao:{0},jine:{1} zhifuchenggon ", paras["attach"].ToString(), AlipayConfig.MoneyFormatDco(paras["total_fee"].ToString()).ToString()).WriteLog(); } return(result); }
/// <summary> /// 初始化 Alipay.DirectPay.DirectPayNotify 类的新实例。 /// </summary> /// <param name="service">通知请求验证服务。</param> /// <param name="parameters">通知请求参数。</param> /// <param name="config">支付宝默认配置。</param> public DirectPayNotify(INotifyService service, IDictionary <string, string> parameters, AlipayConfig config) : base(service, parameters, config) { }
/// <summary> /// 初始化 Alipay.AlipayDirect 类的新实例。 /// </summary> /// <param name="config">支付宝配置。</param> public AlipayDirectPay(AlipayConfig config) { this.Config = config; }
/// <summary> /// 统一收单下单并支付页面接口 /// </summary> public void Trade_Page(AlipayConfig config, Trade_PageInput input) { //AlipayConfig config = new AlipayConfig() //{ // serverUrl = "https://openapi.alipay.com/gateway.do", // appId= "app_id", // privateKeyPem= "merchant_private_key", // format= "json", // version= "1.0", // signType= "RSA2", // alipayPulicKey= "alipay_public_key", // charset= "GBK", // keyFromFile=false //}; IAopClient client = new DefaultAopClient(config.serverUrl, config.appId, config.privateKeyPem, config.format, config.version, config.signType, config.alipayPulicKey, config.charset, config.keyFromFile); AlipayTradePagePayRequest request = new AlipayTradePagePayRequest(); request.BizContent = "{" + "\"out_trade_no\":\"20150320010101001\"," + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"," + "\"total_amount\":88.88," + "\"subject\":\"Iphone6 16G\"," + "\"body\":\"Iphone6 16G\"," + "\"time_expire\":\"2016-12-31 10:05\"," + " \"goods_detail\":[{" + " \"goods_id\":\"apple-01\"," + "\"alipay_goods_id\":\"20010001\"," + "\"goods_name\":\"ipad\"," + "\"quantity\":1," + "\"price\":2000," + "\"goods_category\":\"34543238\"," + "\"body\":\"特价手机\"," + "\"show_url\":\"http://www.alipay.com/xxx.jpg\"" + " }]," + "\"passback_params\":\"merchantBizType%3d3C%26merchantBizNo%3d2016010101111\"," + "\"extend_params\":{" + "\"sys_service_provider_id\":\"2088511833207846\"," + "\"hb_fq_num\":\"3\"," + "\"hb_fq_seller_percent\":\"100\"," + "\"industry_reflux_info\":\"{\\\\\\\"scene_code\\\\\\\":\\\\\\\"metro_tradeorder\\\\\\\",\\\\\\\"channel\\\\\\\":\\\\\\\"xxxx\\\\\\\",\\\\\\\"scene_data\\\\\\\":{\\\\\\\"asset_name\\\\\\\":\\\\\\\"ALIPAY\\\\\\\"}}\"," + "\"card_type\":\"S0JP0000\"" + " }," + "\"goods_type\":\"0\"," + "\"timeout_express\":\"90m\"," + "\"promo_params\":\"{\\\"storeIdType\\\":\\\"1\\\"}\"," + "\"royalty_info\":{" + "\"royalty_type\":\"ROYALTY\"," + " \"royalty_detail_infos\":[{" + " \"serial_no\":1," + "\"trans_in_type\":\"userId\"," + "\"batch_no\":\"123\"," + "\"out_relation_id\":\"20131124001\"," + "\"trans_out_type\":\"userId\"," + "\"trans_out\":\"2088101126765726\"," + "\"trans_in\":\"2088101126708402\"," + "\"amount\":0.1," + "\"desc\":\"分账测试1\"," + "\"amount_percentage\":\"100\"" + " }]" + " }," + "\"sub_merchant\":{" + "\"merchant_id\":\"19023454\"," + "\"merchant_type\":\"alipay: 支付宝分配的间连商户编号, merchant: 商户端的间连商户编号\"" + " }," + "\"enable_pay_channels\":\"pcredit,moneyFund,debitCardExpress\"," + "\"store_id\":\"NJ_001\"," + "\"disable_pay_channels\":\"pcredit,moneyFund,debitCardExpress\"," + "\"qr_pay_mode\":\"1\"," + "\"qrcode_width\":100," + "\"settle_info\":{" + " \"settle_detail_infos\":[{" + " \"trans_in_type\":\"cardSerialNo\"," + "\"trans_in\":\"A0001\"," + "\"summary_dimension\":\"A0001\"," + "\"settle_entity_id\":\"2088xxxxx;ST_0001\"," + "\"settle_entity_type\":\"SecondMerchant、Store\"," + "\"amount\":0.1" + " }]" + " }," + "\"invoice_info\":{" + "\"key_info\":{" + "\"is_support_invoice\":true," + "\"invoice_merchant_name\":\"ABC|003\"," + "\"tax_num\":\"1464888883494\"" + " }," + "\"details\":\"[{\\\"code\\\":\\\"100294400\\\",\\\"name\\\":\\\"服饰\\\",\\\"num\\\":\\\"2\\\",\\\"sumPrice\\\":\\\"200.00\\\",\\\"taxRate\\\":\\\"6%\\\"}]\"" + " }," + "\"agreement_sign_params\":{" + "\"personal_product_code\":\"GENERAL_WITHHOLDING_P\"," + "\"sign_scene\":\"INDUSTRY|CARRENTAL\"," + "\"external_agreement_no\":\"test\"," + "\"external_logon_id\":\"13852852877\"," + "\"sign_validity_period\":\"2m\"," + "\"third_party_type\":\"PARTNER\"," + "\"buckle_app_id\":\"1001164\"," + "\"buckle_merchant_id\":\"268820000000414397785\"," + "\"promo_params\":\"{\\\"key\\\",\\\"value\\\"}\"" + " }," + "\"integration_type\":\"PCWEB\"," + "\"request_from_url\":\"https://\"," + "\"business_params\":\"{\\\"data\\\":\\\"123\\\"}\"," + "\"ext_user_info\":{" + "\"name\":\"李明\"," + "\"mobile\":\"16587658765\"," + "\"cert_type\":\"IDENTITY_CARD\"," + "\"cert_no\":\"362334768769238881\"," + "\"min_age\":\"18\"," + "\"fix_buyer\":\"F\"," + "\"need_check_info\":\"F\"" + " }" + " }"; AlipayTradePagePayResponse response = client.pageExecute(request); Console.WriteLine(response.Body); }
/// <summary> /// 初始化支付宝支付服务 /// </summary> /// <param name="provider">支付宝配置提供器</param> protected AlipayServiceBase(IAlipayConfigProvider provider) { provider.CheckNull(nameof(provider)); _config = provider.GetConfig(); _builder = new AlipayParameterBuilder(_config); }
/// <summary> /// 初始化 Alipay.DirectPay.AlipayDirectPayBankReturn 类的新实例。 /// </summary> /// <param name="config"></param> public DirectPayBankReturn(AlipayConfig config) : base(config) { }
public ActionResult ModifyLogistic() { if (!AppData.IsManagerLogin) { return(Json(new { success = false, msg = "您未登录后台或会话已过期" })); } if (PrivilegeBLL.HasNotPrivilege(AppData.SessionUserID, 1102)) { return(Json(new { success = false, msg = "您没有执行该操作的权限" })); } Validation validation = new Validation(); int orderId = validation.GetInt("orderId"); OrderBLL orderBLL = new OrderBLL(); OrderObj orderObj = orderBLL.GetOrderByID(orderId); if (orderObj == null) { return(Json(new { success = false, msg = "该订单不存在" })); } if (orderObj.PayStatus != 1) { return(Json(new { success = false, msg = "未付款的订单不可发货" })); } orderObj.Logistics = validation.Get("logistics"); orderObj.LogisticsCode = validation.Get("logisticsCode"); orderObj.IsConsigned = validation.GetBool("isConsigned"); orderObj.TransportType = validation.Get("transportType"); orderObj.ExpressID = validation.GetInt("expressId"); if (orderObj.IsConsigned) { ///////////////////////以下参数是需要设置的相关配置参数,设置后不会更改的//////////////////////////// AlipayConfig con = new AlipayConfig(); string partner = con.Partner; string key = con.Key; string input_charset = con.Input_charset; string sign_type = con.Sign_type; //////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////请求参数///////////////////////////////////////////////////////////////////// //--------------必填参数-------------- //支付宝交易号。它是登陆支付宝网站在交易管理中查询得到,一般以8位日期开头的纯数字(如:20100419XXXXXXXXXX) string trade_no = orderObj.TradeNo; //物流公司名称 string logistics_name = orderObj.Logistics; //物流发货单号 string invoice_no = orderObj.LogisticsCode; //物流发货时的运输类型,三个值可选:POST(平邮)、EXPRESS(快递)、EMS(EMS) string transport_type = orderObj.TransportType; //--------------选填参数-------------- //卖家本地电脑IP地址 string seller_ip = ""; ///////////////////////////////////////////////////////////////////////////////////////////////////// //构造请求函数 AlipayServiceFH aliService = new AlipayServiceFH( partner, trade_no, logistics_name, invoice_no, transport_type, seller_ip, key, input_charset, sign_type); /***********************无XML远程解析***********************/ //string sHtmlText = aliService.Build_Form(); //Response.Write(sHtmlText); //Response.End(); /***********************含XML远程解析***********************/ //注意:远程解析XML出错,与IIS服务器配置有关 string url = aliService.Create_url(); XmlTextReader Reader = new XmlTextReader(url); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(Reader); //解析XML,获取XML返回的数据,如:请求处理是否成功、商家网站唯一订单号、支付宝交易号、发货时间等 string nodeIs_success = xmlDoc.SelectSingleNode("/alipay/is_success").InnerText; string nodeOut_trade_no = ""; string nodeTrade_no = ""; string nodeTrade_status = ""; string nodeLast_modified_time = ""; string nodeError = ""; if (nodeIs_success == "T") { nodeOut_trade_no = xmlDoc.SelectSingleNode("/alipay/response/tradeBase/out_trade_no").InnerText; nodeTrade_no = xmlDoc.SelectSingleNode("/alipay/request").ChildNodes[2].InnerText; nodeTrade_status = xmlDoc.SelectSingleNode("/alipay/response/tradeBase/trade_status").InnerText; nodeLast_modified_time = xmlDoc.SelectSingleNode("/alipay/response/tradeBase/last_modified_time").InnerText; } else { nodeError = xmlDoc.SelectSingleNode("/alipay/error").InnerText; } if (nodeIs_success == "T") { orderObj.Status = 3; orderBLL.ModifyLogistic(orderObj); return(Json(new { success = true })); } else { return(Json(new { success = false, msg = nodeError })); } } else { orderBLL.ModifyLogistic(orderObj); return(Json(new { success = true })); } }
protected void Page_Load(object sender, EventArgs e) { ///////////////////////以下参数是需要设置的相关配置参数,设置后不会更改的/////////////////////////// AlipayConfig con = new AlipayConfig(); string partner = con.Partner; string key = con.Key; string seller_email = con.Seller_email; string input_charset = con.Input_charset; string notify_url = con.Notify_url; string return_url = con.Return_url; string show_url = con.Show_url; string sign_type = con.Sign_type; //////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////以下参数是需要通过下单时的订单数据传入进来获得//////////////////////////////// //必填参数 string out_trade_no = DateTime.Now.ToString("yyyyMMddHHmmss"); //请与贵网站订单系统中的唯一订单号匹配 string subject = Request.Form["aliorder"]; //订单名称,显示在支付宝收银台里的“商品名称”里,显示在支付宝的交易管理的“商品名称”的列表里。 string body = Request.Form["alibody"]; //订单描述、订单详细、订单备注,显示在支付宝收银台里的“商品描述”里 string price = Request.Form["alimoney"]; //订单总金额,显示在支付宝收银台里的“商品单价”里 string logistics_fee = "0.00"; //物流费用,即运费。 string logistics_type = "EXPRESS"; //物流类型,三个值可选:EXPRESS(快递)、POST(平邮)、EMS(EMS) string logistics_payment = "SELLER_PAY"; //物流支付方式,两个值可选:SELLER_PAY(卖家承担运费)、BUYER_PAY(买家承担运费) string quantity = "1"; //商品数量,建议默认为1,不改变值,把一次交易看成是一次下订单而非购买一件商品。 //扩展参数——买家收货信息(推荐作为必填) //该功能作用在于买家已经在商户网站的下单流程中填过一次收货信息,而不需要买家在支付宝的付款流程中再次填写收货信息。 //若要使用该功能,请至少保证receive_name、receive_address有值 //收货信息格式请严格按照姓名、地址、邮编、电话、手机的格式填写 string receive_name = "收货人姓名"; //收货人姓名,如:张三 string receive_address = "收货人地址"; //收货人地址,如:XX省XXX市XXX区XXX路XXX小区XXX栋XXX单元XXX号 string receive_zip = "123456"; //收货人邮编,如:123456 string receive_phone = "0571-81234567"; //收货人电话号码,如:0571-81234567 string receive_mobile = "13312341234"; //收货人手机号码,如:13312341234 //扩展参数——第二组物流方式 //物流方式是三个为一组成组出现。若要使用,三个参数都需要填上数据;若不使用,三个参数都需要为空 //有了第一组物流方式,才能有第二组物流方式,且不能与第一个物流方式中的物流类型相同, //即logistics_type="EXPRESS",那么logistics_type_1就必须在剩下的两个值(POST、EMS)中选择 string logistics_fee_1 = ""; //物流费用,即运费。 string logistics_type_1 = ""; //物流类型,三个值可选:EXPRESS(快递)、POST(平邮)、EMS(EMS) string logistics_payment_1 = ""; //物流支付方式,两个值可选:SELLER_PAY(卖家承担运费)、BUYER_PAY(买家承担运费) //扩展参数——第三组物流方式 //物流方式是三个为一组成组出现。若要使用,三个参数都需要填上数据;若不使用,三个参数都需要为空 //有了第一组物流方式和第二组物流方式,才能有第三组物流方式,且不能与第一组物流方式和第二组物流方式中的物流类型相同, //即logistics_type="EXPRESS"、logistics_type_1="EMS",那么logistics_type_2就只能选择"POST" string logistics_fee_2 = ""; //物流费用,即运费。 string logistics_type_2 = ""; //物流类型,三个值可选:EXPRESS(快递)、POST(平邮)、EMS(EMS) string logistics_payment_2 = ""; //物流支付方式,两个值可选:SELLER_PAY(卖家承担运费)、BUYER_PAY(买家承担运费) //扩展功能参数——其他 string buyer_email = ""; //默认买家支付宝账号 string discount = ""; //折扣,是具体的金额,而不是百分比。若要使用打折,请使用负数,并保证小数点最多两位数 ///////////////////////////////////////////////////////////////////////////////////////////////////// //构造请求函数,无需修改 AlipayService aliService = new AlipayService( partner, seller_email, return_url, notify_url, show_url, out_trade_no, subject, body, price, logistics_fee, logistics_type, logistics_payment, quantity, receive_name, receive_address, receive_zip, receive_phone, receive_mobile, logistics_fee_1, logistics_type_1, logistics_payment_1, logistics_fee_2, logistics_type_2, logistics_payment_2, buyer_email, discount, key, input_charset, sign_type); string sHtmlText = aliService.Build_Form(); //打印页面 lbOut_trade_no.Text = out_trade_no; lbTotal_fee.Text = price; lbButton.Text = sHtmlText; }
protected void Page_Load(object sender, EventArgs e) { SortedDictionary <string, string> sArrary = GetRequestGet(); ///////////////////////以下参数是需要设置的相关配置参数,设置后不会更改的////////////////////// AlipayConfig con = new AlipayConfig(); string partner = con.Partner; string key = con.Key; string input_charset = con.Input_charset; string sign_type = con.Sign_type; string transport = con.Transport; ////////////////////////////////////////////////////////////////////////////////////////////// if (sArrary.Count > 0)//判断是否有带返回参数 { AlipayNotify aliNotify = new AlipayNotify(sArrary, Request.QueryString["notify_id"], partner, key, input_charset, sign_type, transport); string responseTxt = aliNotify.ResponseTxt; //获取远程服务器ATN结果,验证是否是支付宝服务器发来的请求 string sign = Request.QueryString["sign"]; //获取支付宝反馈回来的sign结果 string mysign = aliNotify.Mysign; //获取通知返回后计算后(验证)的签名结果 //写日志记录(若要调试,请取消下面两行注释) //string sWord = "responseTxt=" + responseTxt + "\n return_url_log:sign=" + Request.QueryString["sign"] + "&mysign=" + mysign + "\n return回来的参数:" + aliNotify.PreSignStr; //AlipayFunction.log_result(Server.MapPath("log/" + DateTime.Now.ToString().Replace(":", "")) + ".txt",sWord); //判断responsetTxt是否为ture,生成的签名结果mysign与获得的签名结果sign是否一致 //responsetTxt的结果不是true,与服务器设置问题、合作身份者ID、notify_id一分钟失效有关 //mysign与sign不等,与安全校验码、请求时的参数格式(如:带自定义参数等)、编码格式有关 if (responseTxt == "true" && sign == mysign)//验证成功 { ///////////////////////////请在这里加上商户的业务逻辑程序代码/////////////////////////////////////////////////////////////////////////////// //请根据您的业务逻辑来编写程序(以下代码仅作参考) //获取支付宝的通知返回参数 string user_id = Request.QueryString["user_id"]; //获取支付宝用户唯一ID号 //以下是示例—— //判断获取到的user_id的值是否在商户会员数据库中存在(即:是否曾经做过支付宝会员通用登录) // 若不存在,则程序自动为会员快速注册一个会员,把信息插入商户网站会员数据表中, // 且把该会员的在商户网站上的登录状态,更改成“已登录”状态。并记录在商家网站会员数据表中记录登录信息,如登录时间、次数、IP等。 // 若存在,判断该会员在商户网站上的登录状态是否是“已登录”状态 // 若不是,则把该会员的在商户网站上的登录状态,更改成“已登录”状态。并记录在商家网站会员数据表中记录登录信息,如登录时间、次数、IP等。 // 若是,则不做任何数据库业务逻辑处理。判定该次反馈信息为重复刷新返回链接导致。 //打印页面 StringBuilder sbHtml = new StringBuilder(); sbHtml.Append("<table align=center width=350 cellpadding=5 cellspacing=0>"); sbHtml.Append("<tr><td align=center class=font_title>亲爱的商城会员," + user_id + ":<br />您已经登录成功</td>"); sbHtml.Append("</tr></table>"); LblShow.Text = sbHtml.ToString(); //请根据您的业务逻辑来编写程序(以上代码仅作参考) ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// } else//验证失败 { LblShow.Text = "系统出错,验证失败"; } } else { LblShow.Text = "无返回参数"; } }
protected void Page_Load(object sender, EventArgs e) { ///////////////////////以下参数是需要设置的相关配置参数,设置后不会更改的/////////////////////////// AlipayConfig con = new AlipayConfig(); string partner = con.Partner; string key = con.Key; string seller_email = con.Seller_email; string input_charset = con.Input_charset; string notify_url = con.Notify_url; string return_url = con.Return_url; string show_url = con.Show_url; string sign_type = con.Sign_type; //////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////以下参数是需要通过下单时的订单数据传入进来获得//////////////////////////////// //必填参数 string out_trade_no = DateTime.Now.ToString("yyyyMMddHHmmss"); //请与贵网站订单系统中的唯一订单号匹配 string subject = Request.Form["aliorder"]; //订单名称,显示在支付宝收银台里的“商品名称”里,显示在支付宝的交易管理的“商品名称”的列表里。 string body = Request.Form["alibody"]; //订单描述、订单详细、订单备注,显示在支付宝收银台里的“商品描述”里 string total_fee = Request.Form["alimoney"]; //订单总金额,显示在支付宝收银台里的“应付总额”里 //扩展功能参数——默认支付方式 string paymethod = ""; //默认支付方式,四个值可选:bankPay(网银); cartoon(卡通); directPay(余额); CASH(网点支付),初始值 string defaultbank = ""; //默认网银代号,代号列表见http://club.alipay.com/read.php?tid=8681379 初始值 string pay_mode = Request.Form["pay_bank"]; if (pay_mode == "directPay") { paymethod = "directPay"; } else { paymethod = "bankPay"; defaultbank = pay_mode; } //扩展功能参数——防钓鱼 //请慎重选择是否开启防钓鱼功能 //exter_invoke_ip、anti_phishing_key一旦被设置过,那么它们就会成为必填参数 //建议使用POST方式请求数据 string anti_phishing_key = ""; //防钓鱼时间戳 string exter_invoke_ip = ""; //获取客户端的IP地址,建议:编写获取客户端IP地址的程序 //如: //exter_invoke_ip = ""; //anti_phishing_key = AlipayFunction.Query_timestamp(partner); //获取防钓鱼时间戳函数 //扩展功能参数——其他 string extra_common_param = ""; //自定义参数,可存放任何内容(除=、&等特殊字符外),不会显示在页面上 string buyer_email = ""; //默认买家支付宝账号 //扩展功能参数——分润(若要使用,请按照注释要求的格式赋值) string royalty_type = ""; //提成类型,该值为固定值:10,不需要修改 string royalty_parameters = ""; //提成信息集,与需要结合商户网站自身情况动态获取每笔交易的各分润收款账号、各分润金额、各分润说明。最多只能设置10条 //各分润金额的总和须小于等于total_fee //提成信息集格式为:收款方Email_1^金额1^备注1|收款方Email_2^金额2^备注2 //如: //royalty_type = "10"; //royalty_parameters = "[email protected]^0.01^分润备注一|[email protected]^0.01^分润备注二"; ///////////////////////////////////////////////////////////////////////////////////////////////////// //构造请求函数,无需修改 AlipayService aliService = new AlipayService(partner, seller_email, return_url, notify_url, show_url, out_trade_no, subject, body, total_fee, paymethod, defaultbank, anti_phishing_key, exter_invoke_ip, extra_common_param, buyer_email, royalty_type, royalty_parameters, key, input_charset, sign_type); string sHtmlText = aliService.Build_Form(); //打印页面 lbOut_trade_no.Text = out_trade_no; lbTotal_fee.Text = total_fee; lbButton.Text = sHtmlText; }
protected void WriteLog(AlipayConfig config, AlipayParameterBuilder builder, string content) { }
/// <summary> /// App统一下单 /// </summary> /// <param name="request">提交给统一下单API的参数</param> /// <param name="config"></param> /// <param name="timeOut">超时时间</param> /// <returns>成功时返回,其他抛异常</returns> public static AlipayTradeAppPayResponse CreateOrder(AlipayTradeAppPayModel request, AlipayConfig config, int timeOut = 6) { IAopClient client = new AopClient(AlipayConstants.GATEWAYURL, config.AppId, config.PrivateKey, config.Format, config.Version, config.SignType, config.AliPublicKey, config.Charset, config.KeyFromFile); var requestData = new AlipayTradeAppPayRequest(); requestData.SetNotifyUrl(config.NotifyUrl); requestData.SetBizModel(request); return(client.SdkExecute(requestData)); }
protected void Page_Load(object sender, EventArgs e) { ///////////////////////以下参数是需要设置的相关配置参数,设置后不会更改的//////////////////////////// AlipayConfig con = new AlipayConfig(); string partner = con.Partner; string key = con.Key; string input_charset = con.Input_charset; string sign_type = con.Sign_type; //////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////请求参数///////////////////////////////////////////////////////////////////// //--------------必填参数-------------- //支付宝交易号。它是登陆支付宝网站在交易管理中查询得到,一般以8位日期开头的纯数字(如:20100419XXXXXXXXXX) string trade_no = Request.Form["trade_no"]; //物流公司名称 string logistics_name = Request.Form["logistics_name"]; //物流发货单号 string invoice_no = Request.Form["invoice_no"]; //物流发货时的运输类型,三个值可选:POST(平邮)、EXPRESS(快递)、EMS(EMS) string transport_type = Request.Form["transport_type"]; //--------------选填参数-------------- //卖家本地电脑IP地址 string seller_ip = ""; ///////////////////////////////////////////////////////////////////////////////////////////////////// //构造请求函数 AlipayService aliService = new AlipayService( partner, trade_no, logistics_name, invoice_no, transport_type, seller_ip, key, input_charset, sign_type); /***********************无XML远程解析***********************/ //string sHtmlText = aliService.Build_Form(); //Response.Write(sHtmlText); //Response.End(); /***********************含XML远程解析***********************/ //注意:远程解析XML出错,与IIS服务器配置有关 string url = aliService.Create_url(); XmlTextReader Reader = new XmlTextReader(url); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(Reader); //解析XML,获取XML返回的数据,如:请求处理是否成功、商家网站唯一订单号、支付宝交易号、发货时间等 string nodeIs_success = xmlDoc.SelectSingleNode("/alipay/is_success").InnerText; string nodeOut_trade_no = ""; string nodeTrade_no = ""; string nodeTrade_status = ""; string nodeLast_modified_time = ""; string nodeError = ""; if (nodeIs_success == "T") { nodeOut_trade_no = xmlDoc.SelectSingleNode("/alipay/response/tradeBase/out_trade_no").InnerText; nodeTrade_no = xmlDoc.SelectSingleNode("/alipay/request").ChildNodes[2].InnerText; nodeTrade_status = xmlDoc.SelectSingleNode("/alipay/response/tradeBase/trade_status").InnerText; nodeLast_modified_time = xmlDoc.SelectSingleNode("/alipay/response/tradeBase/last_modified_time").InnerText; } else { nodeError = xmlDoc.SelectSingleNode("/alipay/error").InnerText; } //打印页面 StringBuilder sbHtml = new StringBuilder(); sbHtml.Append("<table align=center width=350 cellpadding=5 cellspacing=0>"); sbHtml.Append("<tr><td align=center class=font_title colspan=2>XML返回</td></tr>"); sbHtml.Append("<tr><td class=font_content align=right>请求处理是否成功:</td><td class=font_content align=left>" + nodeIs_success + "</td></tr>"); if (nodeIs_success == "T") { sbHtml.Append("<tr><td class=font_content align=right>商户网站订单号:</td><td class=font_content align=left>" + nodeOut_trade_no + "</td></tr>"); sbHtml.Append("<tr><td class=font_content align=right>支付宝交易号:</td><td class=font_content align=left>" + nodeTrade_no + "</td></tr>"); sbHtml.Append("<tr><td class=font_content align=right>交易状态:</td><td class=font_content align=left>" + nodeTrade_status + "</td></tr>"); sbHtml.Append("<tr><td class=font_content align=right>发货时间等:</td><td class=font_content align=left>" + nodeLast_modified_time + "</td></tr>"); } else { sbHtml.Append("<tr><td class=font_content align=right>错误:</td><td class=font_content align=left>" + nodeError + "</td></tr>"); } sbHtml.Append("</table>"); LblXml.Text = sbHtml.ToString(); //////////////////////////////////////////////////////////////////////////////////////////////////// //请在此处编写商户发货成功后的业务逻辑程序代码,以便把商户网站里的该笔订单与支付宝的订单信息同步。 /////////////////////////////////////////////////////////////////////////////////////////////////// }
/// <summary> /// Wap统一下单 /// </summary> /// <param name="request">提交给统一下单API的参数</param> /// <param name="config"></param> /// <param name="accessToken">用户授权码</param> /// <param name="method">请求方式,两个值可选:POST、GET;</param> /// <param name="timeOut">超时时间</param> /// <returns>成功时返回,其他抛异常</returns> public static async Task <AlipayTradeWapPayResponse> CreateOrderAsync(AlipayTradeWapPayModel request, AlipayConfig config, string accessToken = null, string method = "GET", int timeOut = 6) { IAopClient client = new AopClient(AlipayConstants.GATEWAYURL, config.AppId, config.PrivateKey, config.Format, config.Version, config.SignType, config.AliPublicKey, config.Charset, config.KeyFromFile); var requestData = new AlipayTradeWapPayRequest(); requestData.SetNotifyUrl(config.NotifyUrl); requestData.SetReturnUrl(config.QuitUrl); requestData.SetBizModel(request); return(await client.PageExecute(requestData, accessToken, method)); }
/// <summary> /// 初始化 Alipay.Trades.AlipayTradeResponseBase 类的新实例。 /// </summary> /// <param name="config">支付宝配置。</param> public TradeReturnBase(AlipayConfig config) : base(config) { }
protected void Page_Load(object sender, EventArgs e) { SortedDictionary <string, string> sArrary = GetRequestPost(); ///////////////////////以下参数是需要设置的相关配置参数,设置后不会更改的////////////////////// AlipayConfig con = new AlipayConfig(); string partner = con.Partner; string key = con.Key; string input_charset = con.Input_charset; string sign_type = con.Sign_type; string transport = con.Transport; ////////////////////////////////////////////////////////////////////////////////////////////// if (sArrary.Count > 0)//判断是否有带返回参数 { AlipayNotify aliNotify = new AlipayNotify(sArrary, Request.Form["notify_id"], partner, key, input_charset, sign_type, transport); string responseTxt = aliNotify.ResponseTxt; //获取远程服务器ATN结果,验证是否是支付宝服务器发来的请求 string sign = Request.Form["sign"]; //获取支付宝反馈回来的sign结果 string mysign = aliNotify.Mysign; //获取通知返回后计算后(验证)的签名结果 //写日志记录(若要调试,请取消下面两行注释) string sWord = "responseTxt=" + responseTxt + "\n notify_url_log:sign=" + Request.Form["sign"] + "&mysign=" + mysign + "\n notify回来的参数:" + aliNotify.PreSignStr; AlipayFunction.log_result(Server.MapPath("log/" + DateTime.Now.ToString().Replace(":", "")) + ".txt", sWord); //判断responsetTxt是否为ture,生成的签名结果mysign与获得的签名结果sign是否一致 //responsetTxt的结果不是true,与服务器设置问题、合作身份者ID、notify_id一分钟失效有关 //mysign与sign不等,与安全校验码、请求时的参数格式(如:带自定义参数等)、编码格式有关 if (responseTxt == "true" && sign == mysign)//验证成功 { ///////////////////////////////////////////////////////////////////////////////////////////////////////////// //请在这里加上商户的业务逻辑程序代码 //——请根据您的业务逻辑来编写程序(以下代码仅作参考)—— //获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表 string trade_no = Request.Form["trade_no"]; //支付宝交易号 string order_no = Request.Form["out_trade_no"]; //获取订单号 string total_fee = Request.Form["price"]; //获取总金额 string subject = Request.Form["subject"]; //商品名称、订单名称 string body = Request.Form["body"]; //商品描述、订单备注、描述 string buyer_email = Request.Form["buyer_email"]; //买家支付宝账号 string trade_status = Request.Form["trade_status"]; //交易状态 if (Request.Form["trade_status"] == "WAIT_BUYER_PAY") {//该判断表示买家已在支付宝交易管理中产生了交易记录,但没有付款 //判断该笔订单是否在商户网站中已经做过处理(可参考“集成教程”中“3.4返回数据处理”) //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 //如果有做过处理,不执行商户的业务程序 Response.Write("success"); //请不要修改或删除 } else if (Request.Form["trade_status"] == "WAIT_SELLER_SEND_GOODS") {//该判断示买家已在支付宝交易管理中产生了交易记录且付款成功,但卖家没有发货 //判断该笔订单是否在商户网站中已经做过处理(可参考“集成教程”中“3.4返回数据处理”) //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 //如果有做过处理,不执行商户的业务程序 Response.Write("success"); //请不要修改或删除 } else if (Request.Form["trade_status"] == "WAIT_BUYER_CONFIRM_GOODS") {//该判断表示卖家已经发了货,但买家还没有做确认收货的操作 //判断该笔订单是否在商户网站中已经做过处理(可参考“集成教程”中“3.4返回数据处理”) //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 //如果有做过处理,不执行商户的业务程序 Response.Write("success"); //请不要修改或删除 } else if (Request.Form["trade_status"] == "TRADE_FINISHED") {//该判断表示买家已经确认收货,这笔交易完成 //判断该笔订单是否在商户网站中已经做过处理(可参考“集成教程”中“3.4返回数据处理”) //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 //如果有做过处理,不执行商户的业务程序 Response.Write("success"); //请不要修改或删除 } else { Response.Write("success"); //其他状态判断。普通即时到帐中,其他状态不用判断,直接打印success。 } //——请根据您的业务逻辑来编写程序(以上代码仅作参考)—— ///////////////////////////////////////////////////////////////////////////////////////////////////////////// } else//验证失败 { Response.Write("fail"); } } else { Response.Write("无通知参数"); } }
/// <summary> /// 初始化 Alipay.Trades.TradeNofityBase 类的新实例。 /// </summary> /// <param name="service">通知请求验证服务。</param> /// <param name="parameters">通知请求参数。</param> /// <param name="config">支付宝默认配置。</param> public TradeNofityBase(INotifyService service, IDictionary <string, string> parameters, AlipayConfig config) : base(service, parameters, config) { }
// GET: PayBack此方法仅供直冲用户支付宝支付完成回调以及支付宝充值账户回调 public ActionResult AlipayBack() { SortedDictionary <string, string> sPara = GetRequestGet(); ChargeResult result = new ChargeResult() { Status = ChargeStatus.FAILED }; if (sPara.Count > 0)//判断是否有带返回参数 { AlipayConfig config = new AlipayConfig(System.IO.Path.Combine(Request.PhysicalApplicationPath, "Config\\AliPayConfig.xml")); Notify aliNotify = new Notify(config); bool verifyResult = aliNotify.Verify(sPara, Request.QueryString["notify_id"], Request.QueryString["sign"]); if (verifyResult)//验证成功 { //本地系统支付号 string out_trade_no = Request.QueryString["out_trade_no"]; int paymentId = 0; int.TryParse(out_trade_no, out paymentId); //支付宝交易号 string trade_no = Request.QueryString["trade_no"]; //买家支付宝账户 string buyerAccount = Request.QueryString["buyer_email"]; //交易状态 string trade_status = Request.QueryString["trade_status"]; if (Request.QueryString["trade_status"] == "TRADE_FINISHED" || Request.QueryString["trade_status"] == "TRADE_SUCCESS") { //判断该笔订单是否在商户网站中已经做过处理 //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 //如果有做过处理,不执行商户的业务程序 OrderManagement orderMgr = new OrderManagement(0); PaymentManagement payMgr = new PaymentManagement(0); if (paymentId > 0) { try { BPaymentHistory payment = null; int total = 0; List <BPaymentHistory> payments = payMgr.FindPayments(paymentId, 0, 0, out total); if (payments != null && payments.Count == 1) { payment = payments[0]; if (payment.PayType == 0)//直冲用户支付 { result = orderMgr.ProcessOrderAfterPaid(paymentId, trade_no, buyerAccount); result.Status = ChargeStatus.SUCCEED; result.Message = "支付成功,已经提交到充值系统,请耐心等待..."; return(Redirect("/Product/Charge?message=" + result.Message)); } else if (payment.PayType == 1)//代理商用户充值账户 { payMgr.UpdateAccountMoneyAfterPayment(payment); return(Redirect("/Agent/ChargeAccount?message=" + result.Message)); } } else { result.Status = ChargeStatus.FAILED; result.Message = string.Format("支付号{0}在本系统中不存在", paymentId); } } catch (KMBitException e) { result.Message = e.Message; result.Status = ChargeStatus.FAILED; } catch (Exception ex) { result.Message = ex.Message; result.Status = ChargeStatus.FAILED; } } } else { result.Message = string.Format("支付宝支付失败:{0}", Request.QueryString["trade_status"]); result.Status = ChargeStatus.FAILED; //需要删除本地系统内的支付记录或者充值订单记录TBD } } else//验证失败 { result.Message = "支付宝返回数据验证失败,请不要串改支付宝返回的数据"; result.Status = ChargeStatus.FAILED; //需要删除本地系统内的支付记录或者充值订单记录TBD } } else { result.Message = "支付宝没有返回任何数据,充值失败"; result.Status = ChargeStatus.FAILED; } return(Redirect("/Product/Charge?message=" + result.Message)); }
/// <summary> /// 初始化 Alipay.Trades.AlipayPartnerTradeReturn 类的新实例。 /// </summary> /// <param name="config">支付宝配置。</param> public PartnerTradeReturn(AlipayConfig config) : base(config) { }
/// <summary> /// 初始化 Alipay.DirectPay.DirectPayNotify 类的新实例。 /// </summary> /// <param name="parameters">通知请求参数。</param> /// <param name="config">支付宝默认配置。</param> public DirectPayNotify( IDictionary <string, string> parameters, AlipayConfig config) : this(new NotifyService(config), parameters, config) { }
protected void Page_Load(object sender, EventArgs e) { SortedDictionary <string, string> sArrary = GetRequestGet(); ///////////////////////以下参数是需要设置的相关配置参数,设置后不会更改的////////////////////// AlipayConfig con = new AlipayConfig(); string partner = con.Partner; string key = con.Key; string input_charset = con.Input_charset; string sign_type = con.Sign_type; string transport = con.Transport; ////////////////////////////////////////////////////////////////////////////////////////////// if (sArrary.Count > 0)//判断是否有带返回参数 { AlipayNotify aliNotify = new AlipayNotify(sArrary, Request.QueryString["notify_id"], partner, key, input_charset, sign_type, transport); string responseTxt = aliNotify.ResponseTxt; //获取远程服务器ATN结果,验证是否是支付宝服务器发来的请求 string sign = Request.QueryString["sign"]; //获取支付宝反馈回来的sign结果 string mysign = aliNotify.Mysign; //获取通知返回后计算后(验证)的签名结果 //写日志记录(若要调试,请取消下面两行注释) //string sWord = "responseTxt=" + responseTxt + "\n return_url_log:sign=" + Request.QueryString["sign"] + "&mysign=" + mysign + "\n return回来的参数:" + aliNotify.PreSignStr; //AlipayFunction.log_result(Server.MapPath("log/" + DateTime.Now.ToString().Replace(":", "")) + ".txt",sWord); //判断responsetTxt是否为ture,生成的签名结果mysign与获得的签名结果sign是否一致 //responsetTxt的结果不是true,与服务器设置问题、合作身份者ID、notify_id一分钟失效有关 //mysign与sign不等,与安全校验码、请求时的参数格式(如:带自定义参数等)、编码格式有关 if (responseTxt == "true" && sign == mysign)//验证成功 { ///////////////////////////////////////////////////////////////////////////////////////////////////////////// //请在这里加上商户的业务逻辑程序代码 //——请根据您的业务逻辑来编写程序(以下代码仅作参考)—— //获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表 string trade_no = Request.QueryString["trade_no"]; //支付宝交易号 string order_no = Request.QueryString["out_trade_no"]; //获取订单号 string total_fee = Request.QueryString["price"]; //获取总金额 string subject = Request.QueryString["subject"]; //商品名称、订单名称 string body = Request.QueryString["body"]; //商品描述、订单备注、描述 string buyer_email = Request.QueryString["buyer_email"]; //买家支付宝账号 string receive_name = Request.QueryString["receive_name"]; //收货人姓名 string receive_address = Request.QueryString["receive_address"]; //收货人地址 string receive_zip = Request.QueryString["receive_zip"]; //收货人邮编 string receive_phone = Request.QueryString["receive_phone"]; //收货人电话 string receive_mobile = Request.QueryString["receive_mobile"]; //收货人手机 string trade_status = Request.QueryString["trade_status"]; //交易状态 //打印页面 lbTrade_no.Text = trade_no; lbOut_trade_no.Text = order_no; lbTotal_fee.Text = total_fee; lbSubject.Text = subject; lbBody.Text = body; lbBuyer_email.Text = buyer_email; LbName.Text = receive_name; LbAddress.Text = receive_address; LbZip.Text = receive_zip; LbPhone.Text = receive_phone; LbMobile.Text = receive_mobile; lbTrade_status.Text = trade_status; lbVerify.Text = "验证成功"; if (Request.QueryString["trade_status"] == "WAIT_SELLER_SEND_GOODS") { //判断该笔订单是否在商户网站中已经做过处理(可参考“集成教程”中“3.4返回数据处理”) //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 //如果有做过处理,不执行商户的业务程序 } else { Response.Write("trade_status=" + Request.QueryString["trade_status"]); } //——请根据您的业务逻辑来编写程序(以上代码仅作参考)—— ///////////////////////////////////////////////////////////////////////////////////////////////////////////// } else//验证失败 { lbVerify.Text = "验证失败"; } } else { lbVerify.Text = "无返回参数"; } }
public Alipayment(AlipayConfig config) { _config = config; }
public AlipayParams(IOptions <AlipayConfig> options) { Config = options.Value; }