简单封装的Stripe支付方法

来源:互联网 发布:在淘宝开店流程 编辑:程序博客网 时间:2024/06/04 18:41

最近项目需要用到Stripe支付,于是做了一个简单封装,现在贴出来,也许以后用得着

首先,需要在Stripe官方网站申请注册自己的支付帐号,并获取测试和正式用的前后端校验码。

然后,项目后台需要添加Stripe的dll引用,可以用Nuget安装Stripe.net,也可以自己下载dll然后直接添加引用,这里不赘述了。

需要提醒的是,测试用的银行卡信息如下:

卡号:4242 4242 4242 4242, 到期时间12/17, 校验码:123


好了,先贴前端的的js封装对象:

var myStripe = {    testKey: 'pk_test_tttttttttttttttttttttttt',//注册后得到的前端测试校验码    payKey: 'pk_live_llllllllllllllllllllllll', //注册后得到的前端正式校验码    logoImg: "/Images/marketplace.png",    ajaxPost: function (dt, f) {        $.ajax({            url: f.link,            type: "post",            cache: false,            data: dt,            success: function (re) {                f.callback && f.callback(re);            },            error: function () {                alert("System Error, Please Contact Admin!");            }        });    },    changeHandler: function (f) {        return StripeButton.configure({            key: this.testKey, //正式使用时用payKey            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) {                StripePay.ajaxPost({ Email: token.email, TokenId: token.id }, f);            }        });    },    payHandler: function (f) {        return StripeCheckout.configure({            key: this.testKey,//正式使用时用payKey            name: f.title || 'Payment',            currency: f.currency || 'cad',            amount: f.amount || 0,            allowRememberMe: false,            image: f.logoImg || this.logoImg,            locale: 'auto',            token: function (token) {                StripePay.ajaxPost({ Email: token.email, TokenId: token.id, Amount: f.Amount }, f);            }        });    },    show: function (handler) {        if ($('head').find('#stripe_js').length < 1) {            var _doc = document.getElementsByTagName('head')[0];            var script = document.createElement('script');            script.setAttribute('id', 'stripe_js');            script.setAttribute('type', 'text/javascript');            script.setAttribute('src', 'https://checkout.stripe.com/checkout.js');            _doc.appendChild(script);            script.onload = script.onreadystatechange = function () {                if (!this.readyState || this.readyState == 'loaded' || this.readyState == 'complete') {                    handler.open();                }                script.onload = script.onreadystatechange = null;            }        } else {            handler.open();        }    },    changeCard: function (f) {        this.show(this.changeHandler(f));    },    pay: function (f) {        this.show(this.payHandler(f));    }}
再贴调用举例:

//支付$('#btnPay').on('click', function () {    myStripe.pay({        url: '/Base/StripePay', amount: 9900, callback: function (re) {            if (re.Code == 'Success') {                alert('Pay successful!');            }        }    });});//换卡$('#btnChangeCard').on('click', function () {    myStripe.changeCard({        action: 'StripeChangeCard', callback: function (re) {            if (re.Code == 'Success') {                alert('Change card successful!');            }        }    });});

最后是后台方法:

using Stripe;        /// <summary>        /// 支付        /// </summary>        /// <param name="email"></param>        /// <param name="tokenId"></param>        /// <param name="ammount"></param>        /// <returns></returns>        public ReturnMsg StripePay(string email, string tokenId, int ammount)        {            //第一次充值,创建用户充值帐号            if (string.IsNullOrWhiteSpace(User.ChargeID))            {                var customers = new StripeCustomerService("sk_test_xxxxxxxxxxxxxxxxxxxxxxx");//测试用后台校验码,注意,后台校验码也分测试和正式                var customer = customers.Create(new StripeCustomerCreateOptions                {                    Email = email,                    SourceToken = tokenId                });                User.ChargeID = customer.Id; //本地保存的凭证,避免本地存储用户敏感信息            }            //充值            var charges = new StripeChargeService("sk_test_xxxxxxxxxxxxxxxxxxxxxxx");            var charge = charges.Create(new StripeChargeCreateOptions            {                Amount = ammount,                Currency = "cad",                CustomerId = User.ChargeID            });            if (charge.Status == "succeeded")            {//充值成功            }            else            {//充值失败                ReMsg.Type = MessageType.AmountPayError;            }            return ReMsg;        }        /// <summary>        /// 换卡        /// </summary>        /// <param name="email"></param>        /// <param name="tokenId"></param>        /// <returns></returns>        public ReturnMsg StripeChangeCard(string email, string tokenId)        {            var customers = new StripeCustomerService("sk_test_xxxxxxxxxxxxxxxxxxxxxxx");            var customer = customers.Create(new StripeCustomerCreateOptions            {                Email = email,                SourceToken = tokenId            });            User.ChargeID = customer.Id; //本地保存的凭证,避免本地存储用户敏感信息            return ReMsg;        }

如果对大家有用,欢迎收藏,如有问题,也请及时跟我联系或留言