.net 支付宝扫码支付
/// <summary> /// 阿里云统一下单生成二维码 /// </summary> /// <param name="t_CreateOrderData"></param> /// <returns></returns> public string alipayTradePay(Maticsoft.Model.T_CreateOrderData t_CreateOrderData) { string QR_String = ""; try { //异步回调 var notify_url = AliPayConfig.notify_url; IAopClient client = GetAlipayClient(); AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest(); AlipayTradePrecreateModel model = new AlipayTradePrecreateModel(); //订单标题 model.Subject = t_CreateOrderData.FTitle; //订单金额 model.TotalAmount = t_CreateOrderData.FMoney.ToString(); //销售产品码 签约支付宝的当面付产品 model.ProductCode = "FACE_TO_FACE_PAYMENT"; //拼接订单号 model.OutTradeNo = t_CreateOrderData.FNumber; request.SetBizModel(model); request.SetNotifyUrl(notify_url); //request.SetReturnUrl(return_url); //这里和普通的接口调用不同,使用的是sdkExecute Aop.Api.Response.AlipayTradePrecreateResponse response = client.Execute(request); string ResponseString = response.Body; //异常容错 JObject Response_Json = (JObject)JsonConvert.DeserializeObject(ResponseString); QR_String = Response_Json["alipay_trade_precreate_response"]["qr_code"].ToString(); string Nubmer = Response_Json["alipay_trade_precreate_response"]["out_trade_no"].ToString(); string code = Response_Json["alipay_trade_precreate_response"]["code"].ToString(); string msg = Response_Json["alipay_trade_precreate_response"]["msg"].ToString(); byte[] QR_View = CreateQRimg2(QR_String); } catch (Exception ex) { LoggerHelper.Error("支付宝支付", ex); } return QR_String; } /// <summary> /// 获取支付宝POST过来通知消息,并以“参数名=参数值”的形式组成数组 /// </summary> /// <returns>request回来的信息组成的数组</returns> public IDictionary<string, string> GetRequestPost() { int i = 0; IDictionary<string, string> sArray = new Dictionary<string, string>(); NameValueCollection coll; //Load Form variables into NameValueCollection variable. coll = HttpContext.Current.Request.Form; // Get names of all forms into a string array. String[] requestItem = coll.AllKeys; for (i = 0; i < requestItem.Length; i++) { sArray.Add(requestItem[i], HttpContext.Current.Request.Form[requestItem[i]]); } return sArray; } /// <summary> /// 服务器异步通知页面 /// </summary> public HttpResponseMessage AliPayNotifyUrl() { HttpResponseMessage resp = new HttpResponseMessage(); IDictionary<string, string> map = GetRequestPost(); //如果有返回值 if (map.Count > 0) { try { string alipayPublicKey = AliPayConfig.publicKey; string signType = AliPayConfig.signType; string charset = AliPayConfig.charset; bool keyFromFile = false; bool verify_result = AlipaySignature.RSACheckV1(map, alipayPublicKey, charset, signType, keyFromFile); //验签成功后,按照支付结果异步通知中的描述,对支付结果中的业务内容进行二次校验,校验成功后再response中返回success并继续商户自身业务处理,校验失败返回false if (verify_result) { //商户订单号 string out_trade_no = map["out_trade_no"]; //支付宝交易号 string trade_no = map["trade_no"]; //交易创建时间 string gmt_create = map["gmt_create"]; //交易付款时间 string gmt_payment = map["gmt_payment"]; //买家支付宝账号 string buyer_logon_id = map["buyer_logon_id"]; //通知时间 string notify_time = map["notify_time"]; //通知类型 string notify_type = map["notify_type"]; //通知校验ID string notify_id = map["notify_id"]; //开发者的app_id string app_id = map["app_id"]; //卖家支付宝用户号 string seller_id = map["seller_id"]; //买家支付宝用户号 string buyer_id = map["buyer_id"]; //实收金额 string receipt_amount = map["receipt_amount"]; //交易状态 string return_code = map["trade_status"]; //交易状态TRADE_FINISHED的通知触发条件是商户签约的产品不支持退款功能的前提下,买家付款成功; //或者,商户签约的产品支持退款功能的前提下,交易已经成功并且已经超过可退款期限 //状态TRADE_SUCCESS的通知触发条件是商户签约的产品支持退款功能的前提下,买家付款成功 if (return_code == "TRADE_FINISHED" || return_code == "TRADE_SUCCESS") { int res = 1; //如果支付成功,修改订单状态 if (res == 1) { //更新业务数据 并执行业务逻辑 out_trade_no Maticsoft.BLL.T_CreateOrderData t_CreateOrderDataBll = new Maticsoft.BLL.T_CreateOrderData(); string Token = ""; if (t_CreateOrderDataBll.PayOrderSucceed(out_trade_no,out Token) > 0) { if (!string.IsNullOrEmpty(Token)) { RedisHelper.SetHashValue(Token, out_trade_no, "1"); } resp.Content = new StringContent(JsonConvert.SerializeObject("success"), System.Text.Encoding.UTF8, "text/plian"); return resp; } else { resp.Content = new StringContent(JsonConvert.SerializeObject("支付失败"), System.Text.Encoding.UTF8, "text/plian"); return resp; } } //如果支付失败 else { resp.Content = new StringContent(JsonConvert.SerializeObject("支付失败"), System.Text.Encoding.UTF8, "text/plian"); return resp; } } else { resp.Content = new StringContent(JsonConvert.SerializeObject("支付失败"), System.Text.Encoding.UTF8, "text/plian"); return resp; ; } } else { //验证失败 resp.Content = new StringContent(JsonConvert.SerializeObject("支付失败"), System.Text.Encoding.UTF8, "text/plian"); return resp; } } catch (Exception ex) { LoggerHelper.Error("服务器异步通知页面", ex); resp.Content = new StringContent(JsonConvert.SerializeObject("支付失败"), System.Text.Encoding.UTF8, "text/plian"); return resp; } } else { //无返回参数 resp.Content = new StringContent(JsonConvert.SerializeObject("支付失败"), System.Text.Encoding.UTF8, "text/plian"); return resp; } } /// <summary> /// 我改的生成二维码图片 /// </summary> /// <param name="str"></param> /// <returns></returns> public byte[] CreateQRimg2(string str) { QRCodeGenerator qrGenerator = new QRCodeGenerator(); QRCodeData qrCodeData = qrGenerator.CreateQrCode(str, QRCodeGenerator.ECCLevel.Q); QRCoder.QRCode qrCode = new QRCoder.QRCode(qrCodeData); Bitmap bt = qrCode.GetGraphic(20); //创建内存流 MemoryStream memStream = new MemoryStream(); bt.Save(memStream, ImageFormat.Png); bt.Dispose(); return memStream.ToArray(); } public static IAopClient GetAlipayClient() { string serviceUrl = AliPayConfig.serviceUrl; string appId = AliPayConfig.appId; string privateKey = AliPayConfig.privateKey; string publivKey = AliPayConfig.publicKey; string format = AliPayConfig.format; string version = AliPayConfig.version; string signType = AliPayConfig.signType; string charset = AliPayConfig.charset; bool keyFromFile = AliPayConfig.keyFromFile; IAopClient client = new DefaultAopClient(serviceUrl, appId, privateKey, format, version, signType, publivKey, charset, keyFromFile); ; return client; } public class AliPayConfig { //支付宝网关地址 public static string serviceUrl = WebConfigurationManager.AppSettings["aliServiceUrl"].ToString(); //应用ID public static string appId = WebConfigurationManager.AppSettings["aliAppId"].ToString(); //开发者私钥,由开发者自己生成 public static string privateKey = WebConfigurationManager.AppSettings["aliPrivateKey"].ToString(); //支付宝的应用公钥 public static string publicKey = WebConfigurationManager.AppSettings["aliPublicKey"].ToString(); //支付宝的支付公钥 public static string payKey = WebConfigurationManager.AppSettings["aliPayKey"].ToString(); //服务器异步通知页面路径 public static string notify_url = WebConfigurationManager.AppSettings["aliNotifyUrl"].ToString(); //页面跳转同步通知页面路径 public static string return_url = WebConfigurationManager.AppSettings["aliReturnUrl"].ToString(); //参数返回格式,只支持json public static string format = WebConfigurationManager.AppSettings["aliFormat"].ToString(); // 调用的接口版本,固定为:1.0 public static string version = WebConfigurationManager.AppSettings["aliVersion"].ToString(); // 商户生成签名字符串所使用的签名算法类型,目前支持RSA2和RSA,推荐使用RSA2 public static string signType = WebConfigurationManager.AppSettings["aliSignType"].ToString(); // 字符编码格式 目前支持utf-8 public static string charset = WebConfigurationManager.AppSettings["aliCharset"].ToString(); // false 表示不从文件加载密钥 public static bool keyFromFile = false; // 日志记录 // public static string LogPath = WebConfigurationManager.AppSettings["AliLog"].ToString(); }
让我们一起来学习C#吧~~~