C#集成Stripe支付全指南
本文将演示在C#与ASP.NET环境下如何快速集成Stripe支付功能,涵盖从前端JS调用的Token获取、后端ChargeService的调用逻辑到App.config配置文件的设置。
Stripe支付环境准备
要在C#环境中运行Stripe支付接口,需要预先引用以下核心组件,以确保依赖兼容:
Stripe.net:建议引用版本不低于22.8.0,它是连接Stripe API的主要SDK。Newtonsoft.Json:用于JSON序列化处理,版本号不能低于9.0.1。System.Collections.Immutable:要求版本不低于1.5.0。
项目运行的基础环境要求为 .NET Framework 4.5 或以上版本。
配置站点密钥
首先需要将Stripe账号的公钥(Publishable Key)和私钥(Secret Key)添加到项目的配置文件 web.config 或 app.config 中。
<appSettings>
<!-- Stripe公钥,用于前端初始化 -->
<add key="pk_liveConfig" value="pk_test_XXXXXX" />
<!-- Stripe私钥,绝对保密,仅用于后端 -->
<add key="pk_liveSecretKey" value="sk_test_XXXXXX" />
</appSettings>
前端JS交互代码
在前端HTML页面中,首先加载Stripe提供的官方脚本文件。随后封装一个 myStripe 对象,主要用于控制支付弹窗的弹出以及接收用户提交的Token信息。
<script src="https://js.stripe.com/v3/"></script>
<script src="https://checkout.stripe.com/checkout.js"></script>
<script type="text/javascript">
var myStripe = {
// 从后台获取或配置文件中读取的PublicKey
testKey: '<%=ConfigurationManager.AppSettings["pk_liveConfig"] %>',
logoImg: "https://stripe.com/img/documentation/checkout/marketplace.png",
payHandler: function (f) {
// 关闭其他loading层
layer.closeAll(0);
return StripeCheckout.configure({
key: this.testKey,
name: f.title || 'Stripe费用',
email: f.Email || '',
currency: f.currency || 'USD',
amount: f.amount || 0, // 注意单位通常是分,例如$1对应100
image: f.logoImg || this.logoImg,
locale: 'auto',
token: function (token) {
// 获取Token后,存储以便传给后端
f.tokenId = token.id;
f.email = token.email;
// 回调函数触发Ajax请求通知后端
f.callback(f);
}
});
},
pay: function (f) {
this.payHandler(f).open();
}
};
// 触发支付方式:金额需转换为分
myStripe.pay({
title: 'TEST Order',
currency: 'USD',
amount: <%=Convert.ToInt32(acoumt) %> * 100,
callback: function (p) {
$.ajax({
type: 'POST',
dataType: 'text',
url: '/admin/ajax/PCBAOrdersData.ashx',
data: 'param=Pay&email=' + this.email + "&amount=" + this.amount + "&tokenId=" + this.tokenId,
success: function (data) {
if (data == "succeeded") {
location.href = "success.html";
} else {
alert(data);
}
},
error: function () {
alert("网络请求失败");
}
})
}
});
</script>
运行页面并点击支付时,会弹出标准的Stripe支付界面。效果如图所示:
后端C#处理逻辑
前端成功后会通过Ajax请求后端接口。在后端的处理方法中,我们需要读取传递过来的参数,配置API Key并创建Charge实例来完成扣款。
public void Pay()
{
string Msg = "Payment Failure";
try
{
// 1. 解析前台传来的数据
string tokenId = _Request.GetString("tokenId", "");
string amount = _Request.GetString("amount", "0");
string email = _Request.GetString("email", "");
// 2. 设置Stripe Secret Key
// 必须从系统配置中读取私钥,严禁硬编码
Stripe.StripeConfiguration.SetApiKey(ConfigurationManager.AppSettings["pk_liveSecretKey"]);
// 3. 构造支付选项
var options = new Stripe.ChargeCreateOptions
{
Amount = Convert.ToInt64(amount),
Currency = "usd",
SourceId = tokenId,
Description = "Stripe Order Payment",
ReceiptEmail = email,
};
// 4. 发起API请求
var service = new Stripe.ChargeService();
Stripe.Charge charge = service.Create(options);
// 根据返回结果判断是否成功
Msg = charge.Status;
}
catch (Exception e)
{
// 记录异常日志...
Msg = e.Message;
throw e;
}
finally
{
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.Write(Msg);
HttpContext.Current.Response.End();
}
}
关键注意点
- 金额换算:在Stripe系统中,所有货币的最小单位是“分”或其他非主单位的整数倍(例如1美元代表数字100),因此前端传入的金额通常需要乘以100。
- 安全隔离:公钥(
pk_...)可放置在客户端使用,而私钥(sk_...)必须严格保存在服务器配置文件或环境变量中,绝不能泄露给前端。 - 错误捕获:务必对API调用过程进行Try-Catch包裹,以便在银行拒绝或网络超时等情况下获取具体的错误信息。
总结
C#结合Stripe支付的成功关键在于:正确添加相关依赖库,合理处理公私钥的安全分配,并确保前端的Token能够顺利传递至后端的ChargeCreateOptions中完成交易闭环。
以上就是《C#实现Stripe支付的方法实践》的详细内容,更多关于C# Stripe支付的内容请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













