zoukankan      html  css  js  c++  java
  • Asp.net core MVC paypal支付、回调——app支付

    最近刚加入了一家跨境物联网公司,刚来接到的需求就是微信支付和paypal支付,微信支付做的人很多了,没什么大的难点,之前的随笔提到过,今天主要来谈谈paypal支付。

    首先应该申请一个沙箱环境的支付账号和收款账号,方便后面设置账号信息测试支付用。

    刚开始准备工作就遇到一个坑就是文档,因为paypal只要是针对跨境支付的,所以他的文档也都是英文的,这样对于一个英文底子差的人真的是硬伤(最头痛的是电脑一翻译就卡),没办法只能硬着头皮一点点的看,实在是看不懂的就百度一段段翻译。看完了文档就下载了paypal的sdk,sdk版本很多选择适合自己的就行,由于我用的是.net core直接在nuget里面引用paypal的dll就行了。直接贴一下核心代码仅供参考:

    由于我们是写的wabapi接口供APP端调用,所以调起paypal支付主要是APP端完成的,但是刚开始没弄清楚流程,自己也研究了下pc端的调起方式,引用了sdk后用里面的东西是很简单的

    我这边调起主要用的public static Payment Create(APIContext apiContext, Payment payment);参数根据实体类填充就好。

    我们api主要是做支付后的后台处理操作,所以拿到APP支付的ID就能通过sdk获取到支付的详细信息Payment.Get(apiContext, paypalId),接口就可以对信息入库了。

    调用SDK获取支付方法的核心代码如下:

    Dictionary<string, string> config = new Dictionary<string, string>();
    config.Add("mode", Config.Mode);
    config.Add("clientId", Config.ClientID);
    config.Add("clientSecret", Config.ClientSecret);
    var accessToken = new OAuthTokenCredential(Config.ClientID, Config.ClientSecret, config).GetAccessToken();
    var apiContext = new APIContext(accessToken);
    apiContext.Config = config;//这个在沙箱环境不写也能通过,但是上了生产环境就通不过了,掉这个坑了

    以为这样就完了的,后来为了保险,又加上了paypal的异步回调IPN

    var body = string.Empty;
    using (var reader = new StreamReader(Request.Body, Encoding.UTF8))
    {
    body = await reader.ReadToEndAsync();
    }
    body = "cmd=_notify-validate&" + body;

    var paras = body.Slice("&").ToDictionary(x => x.Slice("=", 2)[0], x => WebUtility.UrlDecode(x.Slice("=", 2)[1]));

    例如orderID=paras.Peek("txn_id")

    var content = new FormUrlEncodedContent(paras);

    //_paypalConfig.ValidateUrl配置的沙箱地址:https://www.sandbox.paypal.com/cgi-bin/webscr
    var response = await client.PostAsync(_paypalConfig.ValidateUrl, content);
    var message = await response.Content.ReadAsStringAsync();

    拿到回调的信息后判断message.Equals("VERIFIED")&&paras.Peek("payment_status").Equals("Completed")同时都满足后台再给用户完成充值。

    OK,基本流程就是这样了,当然这个只是个人做法,仅供参考!!!

  • 相关阅读:
    剑指offer[19]——顺时针打印矩阵
    剑指offer[17]——树的子结构
    剑指offer[16]——合并两个排序的链表
    剑指offer[15]——反转链表
    剑指offer[14]——链表中倒数第k个结点
    剑指offer[13]——调整数组顺序使奇数位于偶数前面
    剑指offer[12]——数值的整数次方
    剑指offer[11]——二进制中1的个数
    剑指offer[10]——矩形覆盖
    linux的基本命令
  • 原文地址:https://www.cnblogs.com/wang150601/p/7910343.html
Copyright © 2011-2022 走看看