新版支付宝手机支付流程_C#版

举报
清雨小竹 发表于 2022/09/25 02:36:23 2022/09/25
【摘要】 需要的Dll AopSdk.dll  在官方SDK中下载。 https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.HXVXzB&treeId=54&articleId=103419&docType=1 官方文档:htt...

需要的Dll AopSdk.dll  在官方SDK中下载。

https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.HXVXzB&treeId=54&articleId=103419&docType=1


官方文档:https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.ukycyq&treeId=54&articleId=106370&docType=1


private static string APPID = "2017060507xxxxx";  //应用ID
private static string ALI_Public_key = "xxxxxxxxx";//支付宝公钥
private static string APP_Private_key = "xxxxxxxx”;//应用私钥(应用私钥注意用支付宝工具 secret_key_tools_RSA_win 转换成非JAVA语言版本)



  
  1. ///1.在服务端签名
  2. public class CreatePayOrderInput
  3. {
  4. public string Body { set; get; }
  5. public string Subject { set; get; }
  6. public string TotalAmount { set; get; }
  7. public string OutTradeNo { set; get; }
  8. }
  9. /// <summary>
  10. /// 获取支付宝签名接口
  11. /// </summary>
  12. /// <param name="input"></param>
  13. /// <returns></returns>
  14. [HttpPost]
  15. public ReturnNode CreatePayOrder(CreatePayOrderInput input)
  16. {
  17. IAopClient client = new DefaultAopClient("https://openapi.alipay.com/gateway.do", APPID, APP_Private_key, "json", "1.0", "RSA2", ALI_Public_key, "UTF-8", false);
  18. //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称如:alipay.trade.app.pay
  19. AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
  20. //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
  21. AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
  22. model.Body = input.Body;//"我是测试数据";
  23. model.Subject = input.Subject;//"1";
  24. model.TotalAmount = input.TotalAmount;//"0.01";
  25. model.OutTradeNo = input.OutTradeNo;//"20170704125896";
  26. model.ProductCode = "QUICK_MSECURITY_PAY";
  27. model.TimeoutExpress = "30m";
  28. request.SetBizModel(model);
  29. request.SetNotifyUrl("http://xxxxxx/shopapi/controllers/PayAliNotify.aspx");//回调地址
  30. //这里和普通的接口调用不同,使用的是sdkExecute
  31. AlipayTradeAppPayResponse response = client.SdkExecute(request);
  32. //页面输出的response.Body就是orderString 可以直接给客户端请求,无需再做处理
  33. return ReturnNode.ReturnSuccess(response.Body);
  34. }


  
  1. /2.支付异步通知服务器方法,可以用aspx页面做地址。
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Collections.Specialized;
  5. using System.Linq;
  6. using System.Web;
  7. using System.Web.UI;
  8. using System.Web.UI.WebControls;
  9. namespace YFAPICommon.Controllers
  10. {
  11. public partial class PayAliNotify : System.Web.UI.Page
  12. {
  13. protected void Page_Load(object sender, EventArgs e)
  14. {
  15. try
  16. {
  17. Dictionary<string, string> param = GetRequestPost();
  18. NotifyFunc(param);
  19. }
  20. catch (Exception ex)
  21. {
  22. }
  23. }
  24. /// 获取支付宝POST过来通知消息,并以“参数名=参数值”的形式组成数组
  25. /// request回来的信息组成的数组
  26. public Dictionary<string, string> GetRequestPost()
  27. {
  28. int i = 0;
  29. Dictionary<string, string> sArray = new Dictionary<string, string>();
  30. NameValueCollection coll;
  31. //Load Form variables into NameValueCollection variable.
  32. coll = Request.Form;
  33. // Get names of all forms into a string array.
  34. String[] requestItem = coll.AllKeys;
  35. for (i = 0; i < requestItem.Length; i++)
  36. {
  37. sArray.Add(requestItem[i], Request.Form[requestItem[i]]);
  38. }
  39. return sArray;
  40. }
  41. }
  42. }



  
  1. ///3.回调签名验证
  2. public class AliNotifyInput
  3. {
  4. public string total_amount { set; get; }// = 2.00
  5. public string buyer_id { set; get; }// = 2088102116773037&
  6. public string body { set; get; }// = 大乐透2.1&
  7. public string trade_no { set; get; }//= 2016071921001003030200089909&
  8. public string refund_fee { set; get; }//= 0.00&
  9. public string notify_time { set; get; }//= 2016-07-19 14:10:49&
  10. public string subject { set; get; }//= 大乐透2.1&
  11. public string sign_type { set; get; }//= RSA2&
  12. public string charset { set; get; }//= utf-8&
  13. public string notify_type { set; get; }//= trade_status_sync&
  14. public string out_trade_no { set; get; }//= 0719141034-6418&
  15. public string gmt_close { set; get; }//= 2016-07-19 14:10:46&
  16. public string gmt_payment { set; get; }//= 2016-07-19 14:10:47&
  17. public string trade_status { set; get; }//= TRADE_SUCCESS&
  18. public string version { set; get; }//= 1.0&
  19. public string sign { set; get; }
  20. public string gmt_create { set; get; }//= 2016-07-19 14:10:44&
  21. public string app_id { set; get; }//= 2015102700040153&
  22. public string seller_id { set; get; }//= 2088102119685838&
  23. public string notify_id { set; get; }//= 4a91b7a78a503640467525113fb7d8bg8e
  24. }
  25. public void NotifyFunc(Dictionary<string, string> param)
  26. {
  27. //校验签名
  28. bool flag = AlipaySignature.RSACheckV1(param, ALI_Public_key, "UTF-8", "RSA2", false);
  29. if (flag)
  30. {
  31. string json = JsonConvert.SerializeObject(param);
  32. AliNotifyInput input = JsonConvert.DeserializeObject<AliNotifyInput>(json);
  33. //校验APPID
  34. if (input.app_id == APPID)
  35. {
  36. //校验支付状态
  37. if (input.trade_status == "TRADE_SUCCESS" || input.trade_status == "TRADE_FINISHED")
  38. {
  39. int totalAmount = (int)(double.Parse(input.total_amount) * 100);
  40. OrderController controller = new OrderController();
  41. controller.PayOrder(input.out_trade_no, totalAmount, "Ali");
  42. }
  43. }
  44. }
  45. }


文章来源: zzzili.blog.csdn.net,作者:清雨小竹,版权归原作者所有,如需转载,请联系作者。

原文链接:zzzili.blog.csdn.net/article/details/75073292

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。