.NET CORE 集成Stripe总结

目前PayPal与Stripe占据绝大数的海外支付渠道。为了帮助小白,快速集成,

主要介绍使用.NET CORE 集成的一些重要步骤,欢迎拍砖,交流,本人v:152¥5658$1861 注意去掉符号即可,是号码。

第一步:https://stripe.com/ 申请一个测试账户,开发人员使用自己的邮箱一些信息,即可注册,门槛不是很高。

第二步:进入https://dashboard.stripe.com/test/dashboard 看url 就知道是测试面板

第三步:进入左导航栏开发者选项,拿到可发布的密钥与密钥,如下图

密钥

第四步:重点来了,看公司给的api 文档,如下图点击浏览文档进去,选择接受信用卡付款

第五步:大致你看了文档之后,总结下来,前后端需要做什么

前端:1. 需要根据pk_test_...那个开头的密钥,初始化js sdk

            2.告诉后端根据本系统订单ID ,创建一个Stripe的订单,好让用户支付对应的金额

            3.后端根据第二步,会产生一个Stripe的订单,这个时候前端需要使用Stripe订单对象的 ClientSecret

    4.扩展:当用户支付成功或者失败的时候,前端会收到此消息,可以调用后端接口,做支付成功后,商品业务逻辑的处       理。当然前端也可以不做,Stripe为我们提供了WebHook 当产生订单状态更改后,会自动调用客户的api

后端:1.提供为前端提供pk_test_...那个开头的密钥接口

           2.根据本系统订单金额,数据一些情况,创建对应Stripe 订单

           3.做一个支付成功后,变更商品业务逻辑的接口。

           4.根据前端4,自己可以做一个接口,接受Stripe 事件回调接口。

第六步:下面贴出来,自己写的一些简单代码,不含业务逻辑。

  public class OrderData  
    {
        /// <summary>
        /// 自己本系统的订单ID 
        /// </summary>
        public string OrderId { get; set; }
    }

public class TestData
    {
        /// <summary>
        /// js 初始化密钥
        /// </summary>
        public string PublishableKey { get; set; }
        /// <summary>
        /// Stripe订单的密钥
        /// </summary>

        public string ClientSecret { get; set; }
    }

  

 

 [ApiController]
    [Route("[controller]/[action]")]
    public class StripeController : ControllerBase
    {
        private PaymentIntentService service;
        public StripeController()
        {
            StripeConfiguration.ApiKey = "sk_test_。。自己的密钥";
            service = new PaymentIntentService();
        }
        public Dictionary<string, string> Parms = new Dictionary<string, string>();
        /// <summary>
        /// 前端获取初始化密钥,与订单的ClientSecret
        /// </summary>
        /// <param name="orderData"></param>
        /// <returns></returns>
        [HttpPost]
        public TestData Get( OrderData orderData)
        {
            StripeConfiguration.ApiKey = "sk_test_。。自己的密钥";
            Parms.Clear();
            Parms.Add("OrderID","1234");
            var options = new PaymentIntentCreateOptions
            {
                Amount = 10000,//单位是分
                Currency = "hkd",//各个国家或地区的货币代码,参考iso国际标准
                PaymentMethodTypes = new List<string> { "card" },//信用卡付款
                StatementDescriptor = "order id 1234 。。。。自己写一些简单的说明", Metadata = Parms //绑定自己系统订单ID ,做数据校验
            };
            var intent = service.Create(options);
            TestData data = new TestData();
            data.PublishableKey = "pk_test_..自己的密钥";
            data.ClientSecret = intent.ClientSecret;
            return data;
        }
    
        /// <summary>
        /// 前端拿到支付成功状态的时候,调用的接口
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        [HttpGet]
        public bool Complete(string id)
        {
            var intent = service.Get(id);
            if (intent.Status== "succeeded")
            {
                //业务逻辑,校验本地的订单是否状态已经更改,防止重复调用,还有校验订单是否匹配,订单的状态等
                return true;
            }
            return false;
        }
    }

 第八步,接口提供完成后,就可以完成跑起来了。自己可以通过下图,看到api交互的情况

第九步,再订单完成的时候,上面是前端告诉自己后端,其实也可以使用webhook ,通过订阅Stripe的事件达到类似的效果

如下图

 

下面附上接受的接口源码

[Route("api/[controller]")]
    public class StripeWebHookController: Controller
    {
        const string endpointSecret = "whsec_。。。。";//事件的密钥,

        [HttpPost]
        public async Task<IActionResult> Index()
        {

            try
            {
                var json = await new StreamReader(HttpContext.Request.Body).ReadToEndAsync();
                var stripeEvent = EventUtility.ConstructEvent(json,
                    Request.Headers["Stripe-Signature"], endpointSecret,throwOnApiVersionMismatch:false);

                //throwOnApiVersionMismatch 这个指定为false,因为api 版本的问题,官方给不含这个参数,
                //跑不起来。除非自己调用创建订阅事件,但是麻烦,故使用这个爽
                // Handle the event
                if (stripeEvent.Type == Events.PaymentIntentSucceeded)
                {
                    var paymentIntent = stripeEvent.Data.Object as PaymentIntent;
                    Console.WriteLine("PaymentIntent was successful!");//订单成功后的业务逻辑
                }
                else if (stripeEvent.Type == Events.PaymentMethodAttached)
                {
                    var paymentMethod = stripeEvent.Data.Object as PaymentMethod;
                    Console.WriteLine("PaymentMethod was attached to a Customer!");
                }
                // ... handle other event types
                else
                {
                    // Unexpected event type
                    return BadRequest();
                }

                return Ok();
            }
            catch (StripeException e)
            {
                MySqlHelper.updateStoreByID("test...e"+ e.Message.ToString());
                return BadRequest();
            }
        }
    }

上面代码的有一个事件的密钥,再你设置接受端点的时候可以看到。

有问题,欢迎交流啊。

 

 

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值