.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();
}
}
}
上面代码的有一个事件的**,再你设置接受端点的时候可以看到。
有问题,欢迎交流啊。
上一篇: progressBar控件使用
推荐阅读
-
.NET CORE 集成Stripe总结
-
.Net Core in Docker - 使用阿里云Codepipeline及阿里云容器镜像服务实现持续集成(CI)
-
.netcore入门32:asp.net core集成NLog
-
.net core webapi集成jwt实现身份认证
-
.NET Core WebAPI集成Swagger做接口管理
-
.NET Core 集成JWT认证
-
.NET Core读取配置文件方式详细总结
-
Asp.Net Core利用xUnit进行主机级别的网络集成测试详解
-
简析.NET Core 以及与 .NET Framework的关系总结
-
分享一个集成.NET Core+Swagger+Consul+Polly+Ocelot+IdentityServer4+Exceptionless+Apollo的入门级微服务开发框架