C#实现Stripe支付的方法实践
作者:新鑫S 发布时间:2023-01-22 01:46:47
标签:C#,Stripe,支付
Stripe支付首页需要引用Stripe.net框架,我引用的是22.8.0版本,注意.NETFramework的版本为4.5,同时需要引用Newtonsoft.Json(版本不能低于9.0.1)和System.Collections.Immutable(版本不低于1.5.0)。
一、前端JS代码如下:
<script src="https://js.stripe.com/v3/"></script>
<script src="https://checkout.stripe.com/checkout.js"></script>
<script type="text/javascript">
//Stripe支付
var myStripe = {
testKey: '<%=ConfigurationManager.AppSettings["pk_liveConfig"] %>', //配置文件中的key 这个从Stripe中取,我就不截图展示了
logoImg: "https://stripe.com/img/documentation/checkout/marketplace.png", //抬头的Logo
//换卡
changeHandler: function (f) {
return StripeButton.configure({
key: this.testKey,
image: f.logoImg || this.logoImg,
name: f.title || 'Update Card Detail',
panelLabel: f.button || 'Submit',
allowRememberMe: false,
locale: 'auto',
dataKey: this.testKey,
token: function (token) {
f.email = token.email;
f.tokenId = token.id;
f.callback(f);
}
});
},
payHandler: function (f) {
layer.closeAll(0);
return StripeCheckout.configure({
key: this.testKey,
name: f.title || 'Stripe费用',
email: f.Email || '',
currency: f.currency || 'zxx',
amount: f.amount || 0,
allowRememberMe: false,
image: f.logoImg || this.logoImg,
locale: 'auto',
token: function (token) {
f.tokenId = token.id;
f.email = token.email;
f.callback(f);
}
});
},
changeCard: function (f) {
this.changeHandler(f).open();
},
pay: function (f) {
this.payHandler(f).open();
},
SendMsg: function (uid) {
var message = {};
message.action = "noticeMember";
message.code = 1;
message.uid = uid;
message.msg = "<div>已有用户购买了该照片!</div>";
socketApi.sendMessage(message);
}
}
myStripe.pay({
title: 'TEST',
currency: 'USD',//币种:美元(USD)、人民币(CNY)、港币(HKD)
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 = "";//支付成功,跳转页面
} else {
layer.msg(data);
}
},
error: function () {
}
})
}
});
</script>
效果如图所示:
二、后端C#代码如下:
/// <summary>
/// Stripe支付
/// </summary>
public void Pay()
{
string Msg = "Payment Failure";
try
{
string tokenId = _Request.GetString("tokenId", "");
string amount = _Request.GetString("amount", "0");
string email = _Request.GetString("email", "");
Stripe.StripeConfiguration.SetApiKey(ConfigurationManager.AppSettings["pk_liveSecretKey"]);
var options = new Stripe.ChargeCreateOptions
{
Amount = Convert.ToInt64(amount),
Currency = "USD",//币种:美元(USD)、人民币(CNY)、港币(HKD)
SourceId = tokenId,
Description = "Stripe支付",//说明
ReceiptEmail = email,
};
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();
}
}
三、配置文件代码如下:
<appSettings>
<add key="pk_liveConfig" value="pk_test_XXXXXX"/><!--stripe账号公钥-->
<add key="pk_liveSecretKey" value="sk_test_XXXXXX"/><!--stripe账号Secret key-->
</appSettings>
Stripe支付的流程就是点击支付按钮就调用myStripe.pay函数去生成token,然后调用callback方法执行后台代码,返回succeeded就是支付成功了
来源:https://blog.csdn.net/weixin_44547599/article/details/122886515


猜你喜欢
- package com.eboy.testyaoyiyao; import java.text.SimpleDateFormat; impo
- 本文实例讲述了C#实现的ZPL条码打印类。分享给大家供大家参考,具体如下:using System;using System.Collect
- Android DragVideo实现播放视频时任意拖拽DragVideoA Method to Drag the Video When P
- java集合的工具类Collections中提供了两种排序的方法,分别是:Collections.sort(List list)Collec
- 开篇本文主要来探讨一下 redis 的单线程模型,文章前半部分会先引用某网络课程讲解的内容(图片+语言描述),后半部分是本人粗略阅读 red
- Java操作redis设置第二天凌晨过期场景在做查询数据的时候,遇到了需要设置数据在redis中第二天过期的问题,但是redis又没有对应的
- Logback简介1、logback和log4j是同一个作者,logback可以看作是log4j的升级版2、logback分为三个模块, l
- C#中,Image为源自 Bitmap 和 Metafile 的类提供功能的抽象基类,也就是说更通用,当我们用Image.FromFile(
- 在Android开发中,View是我们必须要接触的用来展示的技术.通常情况下随着View视图的越来越复杂,整体布局的性能也会随之下降.这里介
- 1 概述在平时开发中,往往会遇到这样一种情况,实现一种功能有很多种算法或者策略,我们可以根据不同的算法或者策略来实现这种功能。比如:想要计算
- 本章将具体讲解下拉菜单的交互。使用下拉菜单(Dropdown)插件,您可以向任何组件(比如导航栏、标签页、胶囊式导航菜单、按钮等)添加下拉菜
- 三目条件运算公式为 x?y:z 其中x的运算结果为boolean类型,先计算x的值,若为true,则整个三目运算的结果为表达式y
- 方法1:C#Label1.Text = Request.Form["txtName"].ToString();vb.ne
- FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写FreeMarker被设计用来生成HTML Web
- 函数指针函数指针是指向函数的指针变量。通常我们说的指针变量是指向一个整型变、字符型或数组等变量,而函数指针是指向函数。函数指针可以像一般函数
- java 多线程的三种构建方法继承Thread类创建线程类public class Thread extends Object
- spring注解配置实现事务控制1、导入相关依赖这个项目当中使用了spring的JdbcTemplate模板类来用在控制层简化jdbc代码,
- 本文实例为大家分享了Unity shader实现自由放大缩小效果的具体代码,供大家参考,具体内容如下代码:以下实现的shader代码:Sha
- 在 Java 中将 Object 转换为 Int我们可以使用 Object 类来引用我们在 Java 中不知道其类型的任
- 简介#要说Java中什么异常最容易出现,我想NullPointerException一定当仁不让,为了解决这种null值判断问题,Java8