{"id":38801,"date":"2023-11-25T11:24:03","date_gmt":"2023-07-08T09:49:52","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8angular%e4%b8%ad%e4%bd%bf%e7%94%a8ngx-stripe%e5%b0%86stripe%e7%9a%84%e6%94%af%e4%bb%98%e8%a1%a8%e5%8d%95%e5%b5%8c%e5%85%a5%e5%88%b0%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e4%b8%ad%e7%9a%84\/"},"modified":"2024-05-04T10:42:43","modified_gmt":"2024-05-04T02:42:43","slug":"%e5%9c%a8angular%e4%b8%ad%e4%bd%bf%e7%94%a8ngx-stripe%e5%b0%86stripe%e7%9a%84%e6%94%af%e4%bb%98%e8%a1%a8%e5%8d%95%e5%b5%8c%e5%85%a5%e5%88%b0%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e4%b8%ad%e7%9a%84","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8angular%e4%b8%ad%e4%bd%bf%e7%94%a8ngx-stripe%e5%b0%86stripe%e7%9a%84%e6%94%af%e4%bb%98%e8%a1%a8%e5%8d%95%e5%b5%8c%e5%85%a5%e5%88%b0%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e4%b8%ad%e7%9a%84\/","title":{"rendered":"\u5728Angular\u4e2d\u4f7f\u7528ngx-stripe\u5c06Stripe\u7684\u652f\u4ed8\u8868\u5355\u5d4c\u5165\u5230\u5e94\u7528\u7a0b\u5e8f\u4e2d\u7684\u65b9\u6cd5"},"content":{"rendered":"<p>\u672c\u6587\u662fAngular Advent Calendar 2022 \u7b2c18\u5929\u7684\u6587\u7ae0\u3002<\/p>\n<p>\u5982\u679c\u60a8\u5728Angular\u4e2d\u5f00\u53d1Web\u670d\u52a1\u6216\u5e94\u7528\u7a0b\u5e8f\uff0c\u53ef\u4ee5\u4f7f\u7528\u65b9\u4fbf\u7684\u5e93&#8221;ngx-stripe&#8221;\u6765\u96c6\u6210Stripe\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>\u672c\u6587\u4ecb\u7ecd\u4e86\u5728Angular\u9879\u76ee\u4e2d\u4f7f\u7528ngx-stripe\u96c6\u6210\u4ed8\u6b3e\u8868\u5355\u7684\u65b9\u6cd5\u3002<\/p>\n<h2>\u5173\u4e8eAngular\u7248\u672c<\/h2>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">&#8220;@angular\/core&#8221;: &#8220;^15.0.0&#8221;<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">&#8220;ngx-stripe&#8221;: &#8220;^14.1.0&#8221;<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">&#8220;@stripe\/stripe-js&#8221;: &#8220;^1.44.1&#8221;<\/ul>\n<h2>Angular\u5e94\u7528\u7684\u8bbe\u7f6e<\/h2>\n<p>\u9996\u5148\u8981\u8bbe\u7f6e\u5e94\u7528\u7a0b\u5e8f\u3002<\/p>\n<pre class=\"post-pre\"><code>$ npm i -g @angular\/cli\r\n$ ng new ng-stripe-demo\r\n<\/code><\/pre>\n<p>\u5f53\u60a8\u9996\u6b21\u8fd0\u884cng\u547d\u4ee4\u65f6\uff0c\u4f1a\u8be2\u95ee\u60a8\u662f\u5426\u8981\u8bbe\u7f6e\u81ea\u52a8\u8865\u5168\u3002<\/p>\n<pre class=\"post-pre\"><code>? Would you like to enable autocompletion? This will set up your terminal so pressing TAB while typing Angular CLI commands will show possible options \r\nand autocomplete arguments. (Enabling autocompletion will modify configuration files in your home directory.) (Y\/n) \r\n<\/code><\/pre>\n<p>\u9664\u975e\u4f7f\u7528\u5171\u4eab\u673a\u5668\u6216\u8005\u5c06\u6765\u6ca1\u6709\u8ba1\u5212\u4f7f\u7528Angular\uff0c\u5426\u5219\u5efa\u8bae\u4f7f\u7528y\u6765\u8fdb\u884c\u8bbe\u7f6e\u3002<\/p>\n<p>\u4e3a\u4e86\u4f7f\u672c\u6b21\u6f14\u793a\u7b80\u5355\u660e\u4e86\uff0c\u7701\u7565\u4e86\u8def\u7531\u548cCSS\u7684\u5143\u8bed\u8a00\u3002<\/p>\n<pre class=\"post-pre\"><code>? Would you like to add Angular routing? No\r\n? Which stylesheet format would you like to use? CSS\r\n<\/code><\/pre>\n<p>\u4e00\u65e6\u8bbe\u7f6e\u5b8c\u6210\uff0c\u5c06\u4f1a\u663e\u793a\u4ee5\u4e0b\u6d88\u606f\u3002<\/p>\n<pre class=\"post-pre\"><code>\u2714 Packages installed successfully.\r\n    Successfully initialized git.\r\n<\/code><\/pre>\n<p>\u8ba9\u6211\u4eec\u8fdb\u5165\u9879\u76ee\u76ee\u5f55\u5e76\u542f\u52a8\u5f00\u53d1\u670d\u52a1\u5668\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>ng serve\r\nBuild at: 2022-11-30T08:43:42.491Z - Hash: 04ce66ad26425dbf - Time: 5930ms\r\n\r\n<span class=\"k\">**<\/span> Angular Live Development Server is listening on localhost:4200, open your browser on http:\/\/localhost:4200\/ <span class=\"k\">**<\/span>\r\n\r\n\r\n\u2714 Compiled successfully.\r\n<\/code><\/pre>\n<p>\u8bbf\u95ee\u663e\u793a\u7684URL(http:\/\/localhost:4200\/)\uff0c\u786e\u4fdd\u6f14\u793a\u754c\u9762\u6b63\u5e38\u663e\u793a\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d36f237434c4406c715d9\/19-0.png\" alt=\"\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8 2022-11-30 17.47.12.png\" \/><\/div>\n<h2>\u4f7f\u7528ngx-stripe\u5c06Stripe\u7684\u652f\u4ed8\u8868\u5355\u96c6\u6210\u8fdb\u6765\u3002<\/h2>\n<p>\u4ece\u8fd9\u91cc\u5f00\u59cb\u4f7f\u7528ngx-stripe\uff0c\u5c06\u652f\u4ed8\u8868\u5355\u96c6\u6210\u8fdb\u6765\u3002<\/p>\n<p>&nbsp;<\/p>\n<h3>\u56fe\u4e66\u9986\u7684\u5b89\u88c5\u548c\u8bbe\u7f6e<\/h3>\n<p>\u8bf7\u6309\u7167\u6587\u6863\u7684\u6307\u793a\u5b89\u88c5\u5e93\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>npm <span class=\"nb\">install <\/span>ngx-stripe @stripe\/stripe-js\r\n<\/code><\/pre>\n<div>ngx-stripe\u768414.1.0\u7248\u672c\u4e4b\u524d\uff0c\u5728\u5b89\u88c5Angular v15\u65f6\u53ef\u80fd\u4f1a\u51fa\u73b0\u9519\u8bef\u3002<br \/>\n\u6839\u636eGitHub\u7684\u95ee\u9898\u62a5\u544a\uff0c\u5b83\u6307\u51fa\u201c\u7531\u4e8e\u5185\u90e8\u53d8\u66f4\u9700\u8981\u66f4\u591a\u65f6\u95f4\u6765\u53d1\u5e03\u3002\u201d<br \/>\n\u76f8\u5173\u94fe\u63a5\uff1ahttps:\/\/github.com\/richnologies\/ngx-stripe\/issues\/187<br \/>\n\u76ee\u524d\uff0c\u60a8\u53ef\u4ee5\u901a\u8fc7npm install ngx-stripe &#8211;force\u8fdb\u884c\u5b89\u88c5\uff0c\u5982\u679c\u5b89\u88c5\u4e0d\u6210\u529f\uff0c\u8bf7\u5c1d\u8bd5\u4f7f\u7528\u6b64\u65b9\u6cd5\u3002<\/div>\n<p>\u8ba9\u6211\u4eec\u5728NgModule\u4e2d\u52a0\u8f7d\u5df2\u5b89\u88c5\u7684ngx-stripe\u3002<\/p>\n<p>\u5c06 src\/app\/app.module.ts \u6587\u4ef6\u4fee\u6539\u5982\u4e0b\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">NgModule<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@angular\/core<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">BrowserModule<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@angular\/platform-browser<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"hil\"><span class=\"o\">+<\/span><span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">NgxStripeModule<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">ngx-stripe<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">AppComponent<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">.\/app.component<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"p\">@<\/span><span class=\"nd\">NgModule<\/span><span class=\"p\">({<\/span>\r\n  <span class=\"na\">declarations<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span>\r\n    <span class=\"nx\">AppComponent<\/span>\r\n  <span class=\"p\">],<\/span>\r\n  <span class=\"na\">imports<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span>\r\n    <span class=\"nx\">BrowserModule<\/span><span class=\"p\">,<\/span>\r\n<span class=\"hil\"><span class=\"o\">+ <\/span>   <span class=\"nx\">NgxStripeModule<\/span><span class=\"p\">.<\/span><span class=\"nf\">forRoot<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">pk_test_\u304b\u3089\u59cb\u307e\u308bStripe\u306e\u516c\u958b\u53ef\u80fdAPI\u30ad\u30fc<\/span><span class=\"dl\">'<\/span><span class=\"p\">)<\/span>\r\n<\/span>  <span class=\"p\">],<\/span>\r\n  <span class=\"na\">providers<\/span><span class=\"p\">:<\/span> <span class=\"p\">[],<\/span>\r\n  <span class=\"na\">bootstrap<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span><span class=\"nx\">AppComponent<\/span><span class=\"p\">]<\/span>\r\n<span class=\"p\">})<\/span>\r\n<span class=\"k\">export<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">AppModule<\/span> <span class=\"p\">{<\/span> <span class=\"p\">}<\/span>\r\n\r\n<\/code><\/pre>\n<h3>\u8c03\u7528API\u6765\u83b7\u53d6Payment Intent\u3002<\/h3>\n<p>\u5728\u663e\u793aStripe.js\u7684\u5361\u7247\u5143\u7d20\u4e4b\u524d\uff0c\u9700\u8981\u9884\u5148\u521b\u5efaPayment Intent\u6216Setup Intent\uff08\u4ec5\u4fdd\u5b58\u5361\u7247\u4fe1\u606f\u7b49\u60c5\u51b5\uff09\u3002<\/p>\n<p>\u5728Stripe\u6587\u6863\u7684\u5feb\u901f\u5165\u95e8\u4e2d\u51c6\u5907API\u3002<\/p>\n<p>&nbsp;<\/p>\n<h3>\u5728\u53d6\u5f97\u7684\u4ed8\u6b3e\u610f\u56fe\u4e2d\u663e\u793a\u652f\u4ed8\u8868\u5355\u3002<\/h3>\n<p>\u901a\u8fc7\u8c03\u7528\u51c6\u5907\u597d\u7684API\uff0c\u4f8b\u5982\u5feb\u901f\u5165\u95e8\uff0c\u5c55\u793a\u652f\u4ed8\u8868\u5355\u3002<\/p>\n<p>\u7531\u4e8e\u8981\u4f7f\u7528HttpClientModule\uff0c\u6240\u4ee5\u9700\u8981\u5148\u5728src\/app\/app.module.ts\u4e2d\u8fdb\u884c\u8bbe\u7f6e\u3002<\/p>\n<pre class=\"post-pre\"><code>\r\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">NgModule<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@angular\/core<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">BrowserModule<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@angular\/platform-browser<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"hil\"><span class=\"o\">+<\/span><span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">HttpClientModule<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@angular\/common\/http<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<\/span><span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">NgxStripeModule<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">ngx-stripe<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">AppComponent<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">.\/app.component<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"p\">@<\/span><span class=\"nd\">NgModule<\/span><span class=\"p\">({<\/span>\r\n  <span class=\"na\">declarations<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span>\r\n    <span class=\"nx\">AppComponent<\/span>\r\n  <span class=\"p\">],<\/span>\r\n  <span class=\"na\">imports<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span>\r\n    <span class=\"nx\">BrowserModule<\/span><span class=\"p\">,<\/span>\r\n<span class=\"hil\"><span class=\"o\">+ <\/span>   <span class=\"nx\">HttpClientModule<\/span><span class=\"p\">,<\/span>\r\n<\/span>    <span class=\"nx\">NgxStripeModule<\/span><span class=\"p\">.<\/span><span class=\"nf\">forRoot<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">pk_test_\u304b\u3089\u59cb\u307e\u308bStripe\u306e\u516c\u958b\u53ef\u80fdAPI\u30ad\u30fc<\/span><span class=\"dl\">'<\/span><span class=\"p\">)<\/span>\r\n  <span class=\"p\">],<\/span>\r\n  <span class=\"na\">providers<\/span><span class=\"p\">:<\/span> <span class=\"p\">[],<\/span>\r\n  <span class=\"na\">bootstrap<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span><span class=\"nx\">AppComponent<\/span><span class=\"p\">]<\/span>\r\n<span class=\"p\">})<\/span>\r\n<span class=\"k\">export<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">AppModule<\/span> <span class=\"p\">{<\/span> <span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<p>\u5c06src\/app\/app.component.ts\u8fdb\u884c\u5982\u4e0b\u66f4\u6539\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"hdl\"><span class=\"o\">-<\/span><span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">Component<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@angular\/core<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<\/span><span class=\"hil\"><span class=\"o\">+<\/span><span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">Component<\/span><span class=\"p\">,<\/span> <span class=\"nx\">OnInit<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@angular\/core<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<\/span><span class=\"hil\"><span class=\"o\">+<\/span><span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">HttpClient<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@angular\/common\/http<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<\/span><span class=\"hil\"><span class=\"o\">+<\/span><span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">Observable<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">rxjs<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<\/span>\r\n<span class=\"kd\">type<\/span> <span class=\"nx\">PaymentIntentAPIResponse<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"na\">clientSecret<\/span><span class=\"p\">:<\/span> <span class=\"kr\">string<\/span><span class=\"p\">;<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"p\">@<\/span><span class=\"nd\">Component<\/span><span class=\"p\">({<\/span>\r\n  <span class=\"na\">selector<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">app-root<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span>\r\n  <span class=\"na\">templateUrl<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">.\/app.component.html<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span>\r\n  <span class=\"na\">styleUrls<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span><span class=\"dl\">'<\/span><span class=\"s1\">.\/app.component.css<\/span><span class=\"dl\">'<\/span><span class=\"p\">]<\/span>\r\n<span class=\"p\">})<\/span>\r\n<span class=\"k\">export<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">AppComponent<\/span> <span class=\"k\">implements<\/span> <span class=\"nx\">OnInit<\/span> <span class=\"p\">{<\/span>\r\n\r\n  <span class=\"nl\">clientSecret<\/span><span class=\"p\">:<\/span> <span class=\"kr\">string<\/span> <span class=\"o\">=<\/span> <span class=\"dl\">''<\/span><span class=\"p\">;<\/span>\r\n\r\n  <span class=\"nf\">constructor<\/span><span class=\"p\">(<\/span>\r\n    <span class=\"k\">private<\/span> <span class=\"k\">readonly<\/span> <span class=\"nx\">http<\/span><span class=\"p\">:<\/span> <span class=\"nx\">HttpClient<\/span><span class=\"p\">,<\/span>\r\n  <span class=\"p\">)<\/span> <span class=\"p\">{}<\/span>\r\n\r\n  <span class=\"nf\">ngOnInit<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nf\">createPaymentIntent<\/span><span class=\"p\">()<\/span>\r\n      <span class=\"p\">.<\/span><span class=\"nf\">subscribe<\/span><span class=\"p\">(<\/span><span class=\"nx\">pi<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">clientSecret<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">pi<\/span><span class=\"p\">.<\/span><span class=\"nx\">clientSecret<\/span>\r\n      <span class=\"p\">})<\/span>\r\n  <span class=\"p\">}<\/span>\r\n\r\n  <span class=\"k\">private<\/span> <span class=\"nf\">createPaymentIntent<\/span><span class=\"p\">():<\/span> <span class=\"nx\">Observable<\/span><span class=\"o\">&lt;<\/span><span class=\"nx\">PaymentIntentAPIResponse<\/span><span class=\"o\">&gt;<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"k\">return<\/span> <span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">http<\/span><span class=\"p\">.<\/span><span class=\"nx\">post<\/span><span class=\"o\">&lt;<\/span><span class=\"nx\">PaymentIntentAPIResponse<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">(<\/span>\r\n      <span class=\"s2\">`http:\/\/localhost:3000\/create-payment-intent`<\/span><span class=\"p\">,<\/span>\r\n      <span class=\"p\">{}<\/span>\r\n    <span class=\"p\">);<\/span>\r\n  <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<p>\u7136\u540e\uff0c\u7528\u4ee5\u4e0b\u4ee3\u7801\u8986\u76d6 src\/app\/app.component.html \u6587\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code>\r\n<span class=\"nt\">&lt;form&gt;<\/span>\r\n  <span class=\"nt\">&lt;ng-container<\/span> <span class=\"na\">*ngIf=<\/span><span class=\"s\">\"clientSecret\"<\/span><span class=\"nt\">&gt;<\/span>\r\n    <span class=\"nt\">&lt;ngx-stripe-payment<\/span> <span class=\"na\">[clientSecret]=<\/span><span class=\"s\">\"clientSecret\"<\/span><span class=\"nt\">&gt;<\/span>\r\n    <span class=\"nt\">&lt;\/ngx-stripe-payment&gt;<\/span>\r\n    <span class=\"nt\">&lt;button&gt;<\/span>\u652f\u6255\u3046<span class=\"nt\">&lt;\/button&gt;<\/span>\r\n  <span class=\"nt\">&lt;\/ng-container&gt;<\/span>\r\n<span class=\"nt\">&lt;\/form&gt;<\/span>\r\n<\/code><\/pre>\n<p>\u4fdd\u5b58\u4e24\u4e2a\u6587\u4ef6\u540e\uff0c\u5e94\u7528\u754c\u9762\u5c06\u53d8\u4e3a\u7ed3\u7b97\u8868\u5355\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d36f237434c4406c715d9\/43-0.png\" alt=\"\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8 2022-11-30 18.59.17.png\" \/><\/div>\n<h2>\u8ba9\u6211\u4eec\u6765\u5b9e\u73b0\u8868\u5355\u7684\u63d0\u4ea4\u5904\u7406<\/h2>\n<p>\u6700\u540e\uff0c\u6211\u4eec\u9700\u8981\u6dfb\u52a0\u8f93\u5165\u4fe1\u7528\u5361\u4fe1\u606f\u540e\u7684&#8221;\u63d0\u4ea4&#8221;\u5904\u7406\u3002<\/p>\n<p>\u7531\u4e8e\u6211\u4eec\u5c06\u4f7f\u7528FormsModule\uff0c\u6240\u4ee5\u9700\u8981\u5148\u5728src\/app\/app.module.ts\u6587\u4ef6\u4e2d\u8fdb\u884c\u8bbe\u7f6e\u3002<\/p>\n<pre class=\"post-pre\"><code>\r\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">NgModule<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@angular\/core<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">BrowserModule<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@angular\/platform-browser<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"hil\"><span class=\"o\">+<\/span><span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">FormsModule<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@angular\/forms<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<\/span><span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">HttpClientModule<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@angular\/common\/http<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">NgxStripeModule<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">ngx-stripe<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">AppComponent<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">.\/app.component<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"p\">@<\/span><span class=\"nd\">NgModule<\/span><span class=\"p\">({<\/span>\r\n  <span class=\"na\">declarations<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span>\r\n    <span class=\"nx\">AppComponent<\/span>\r\n  <span class=\"p\">],<\/span>\r\n  <span class=\"na\">imports<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span>\r\n    <span class=\"nx\">BrowserModule<\/span><span class=\"p\">,<\/span>\r\n<span class=\"hil\"><span class=\"o\">+ <\/span>   <span class=\"nx\">FormsModule<\/span><span class=\"p\">,<\/span>\r\n<\/span>    <span class=\"nx\">HttpClientModule<\/span><span class=\"p\">,<\/span>\r\n    <span class=\"nx\">NgxStripeModule<\/span><span class=\"p\">.<\/span><span class=\"nf\">forRoot<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">pk_test_\u304b\u3089\u59cb\u307e\u308bStripe\u306e\u516c\u958b\u53ef\u80fdAPI\u30ad\u30fc<\/span><span class=\"dl\">'<\/span><span class=\"p\">)<\/span>\r\n  <span class=\"p\">],<\/span>\r\n  <span class=\"na\">providers<\/span><span class=\"p\">:<\/span> <span class=\"p\">[],<\/span>\r\n  <span class=\"na\">bootstrap<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span><span class=\"nx\">AppComponent<\/span><span class=\"p\">]<\/span>\r\n<span class=\"p\">})<\/span>\r\n<span class=\"k\">export<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">AppModule<\/span> <span class=\"p\">{<\/span> <span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<p>\u8ba9\u6211\u4eec\u5728src\/app\/app.component.ts\u6587\u4ef6\u4e2d\u8bbe\u7f6e\u4e00\u4e2a\u5c06\u51fd\u6570\u8bbe\u7f6e\u4e3aform\u7684\u9009\u9879\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"hdl\"><span class=\"o\">-<\/span><span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">Component<\/span><span class=\"p\">,<\/span> <span class=\"nx\">OnInit<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@angular\/core<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<\/span><span class=\"hil\"><span class=\"o\">+<\/span><span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">Component<\/span><span class=\"p\">,<\/span> <span class=\"nx\">OnInit<\/span><span class=\"p\">,<\/span> <span class=\"nx\">ViewChild<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@angular\/core<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<\/span><span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">HttpClient<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@angular\/common\/http<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"hil\"><span class=\"o\">+<\/span><span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">StripePaymentElementComponent<\/span><span class=\"p\">,<\/span> <span class=\"nx\">StripeService<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">ngx-stripe<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<\/span><span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">Observable<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">rxjs<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"kd\">type<\/span> <span class=\"nx\">PaymentIntentAPIResponse<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"na\">clientSecret<\/span><span class=\"p\">:<\/span> <span class=\"kr\">string<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"p\">@<\/span><span class=\"nd\">Component<\/span><span class=\"p\">({<\/span>\r\n  <span class=\"na\">selector<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">app-root<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span>\r\n  <span class=\"na\">templateUrl<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">.\/app.component.html<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span>\r\n  <span class=\"na\">styleUrls<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span><span class=\"dl\">'<\/span><span class=\"s1\">.\/app.component.css<\/span><span class=\"dl\">'<\/span><span class=\"p\">]<\/span>\r\n<span class=\"p\">})<\/span>\r\n<span class=\"k\">export<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">AppComponent<\/span> <span class=\"k\">implements<\/span> <span class=\"nx\">OnInit<\/span> <span class=\"p\">{<\/span>\r\n<span class=\"hil\"><span class=\"o\">+ <\/span> <span class=\"p\">@<\/span><span class=\"nd\">ViewChild<\/span><span class=\"p\">(<\/span><span class=\"nx\">StripePaymentElementComponent<\/span><span class=\"p\">)<\/span> <span class=\"nx\">paymentElement<\/span><span class=\"p\">?:<\/span> <span class=\"nx\">StripePaymentElementComponent<\/span>\r\n<\/span>\r\n  <span class=\"nx\">clientSecret<\/span><span class=\"p\">:<\/span> <span class=\"kr\">string<\/span> <span class=\"o\">=<\/span> <span class=\"dl\">''<\/span><span class=\"p\">;<\/span>\r\n\r\n  <span class=\"nf\">constructor<\/span><span class=\"p\">(<\/span>\r\n<span class=\"hil\"><span class=\"o\">+ <\/span>   <span class=\"k\">private<\/span> <span class=\"k\">readonly<\/span> <span class=\"nx\">stripeService<\/span><span class=\"p\">:<\/span> <span class=\"nx\">StripeService<\/span><span class=\"p\">,<\/span>\r\n<\/span>    <span class=\"k\">private<\/span> <span class=\"k\">readonly<\/span> <span class=\"nx\">http<\/span><span class=\"p\">:<\/span> <span class=\"nx\">HttpClient<\/span><span class=\"p\">,<\/span>\r\n  <span class=\"p\">)<\/span> <span class=\"p\">{}<\/span>\r\n\r\n  <span class=\"nf\">ngOnInit<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nf\">createPaymentIntent<\/span><span class=\"p\">()<\/span>\r\n      <span class=\"p\">.<\/span><span class=\"nf\">subscribe<\/span><span class=\"p\">(<\/span><span class=\"nx\">pi<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">clientSecret<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">pi<\/span><span class=\"p\">.<\/span><span class=\"nx\">clientSecret<\/span>\r\n      <span class=\"p\">});<\/span>\r\n  <span class=\"p\">}<\/span>\r\n\r\n  <span class=\"k\">private<\/span> <span class=\"nf\">createPaymentIntent<\/span><span class=\"p\">():<\/span> <span class=\"nx\">Observable<\/span><span class=\"o\">&lt;<\/span><span class=\"nx\">PaymentIntentAPIResponse<\/span><span class=\"o\">&gt;<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"k\">return<\/span> <span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">http<\/span><span class=\"p\">.<\/span><span class=\"nx\">post<\/span><span class=\"o\">&lt;<\/span><span class=\"nx\">PaymentIntentAPIResponse<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">(<\/span>\r\n      <span class=\"s2\">`http:\/\/localhost:3000\/create-payment-intent`<\/span><span class=\"p\">,<\/span>\r\n      <span class=\"p\">{}<\/span>\r\n    <span class=\"p\">);<\/span>\r\n  <span class=\"p\">}<\/span>\r\n\r\n<span class=\"hil\"><span class=\"o\">+ <\/span> <span class=\"nf\">pay<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\r\n<\/span><span class=\"hil\"><span class=\"o\">+ <\/span>   <span class=\"k\">if <\/span><span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">paymentElement<\/span><span class=\"p\">)<\/span> <span class=\"k\">return<\/span><span class=\"p\">;<\/span>\r\n<\/span><span class=\"hil\"><span class=\"o\">+ <\/span>   <span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">stripeService<\/span><span class=\"p\">.<\/span><span class=\"nf\">confirmPayment<\/span><span class=\"p\">({<\/span>\r\n<\/span><span class=\"hil\"><span class=\"o\">+ <\/span>     <span class=\"na\">elements<\/span><span class=\"p\">:<\/span> <span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">paymentElement<\/span><span class=\"p\">.<\/span><span class=\"nx\">elements<\/span><span class=\"p\">,<\/span>\r\n<\/span><span class=\"hil\"><span class=\"o\">+ <\/span>     <span class=\"na\">redirect<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">if_required<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span>\r\n<\/span><span class=\"hil\"><span class=\"o\">+ <\/span>   <span class=\"p\">}).<\/span><span class=\"nf\">subscribe<\/span><span class=\"p\">(<\/span><span class=\"nx\">result<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n<\/span><span class=\"hil\"><span class=\"o\">+ <\/span>     <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">Result<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"nx\">result<\/span><span class=\"p\">);<\/span>\r\n<\/span><span class=\"hil\"><span class=\"o\">+ <\/span>     <span class=\"k\">if <\/span><span class=\"p\">(<\/span><span class=\"nx\">result<\/span><span class=\"p\">.<\/span><span class=\"nx\">error<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n<\/span><span class=\"hil\"><span class=\"o\">+ <\/span>       <span class=\"nf\">alert<\/span><span class=\"p\">(<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">Failed<\/span><span class=\"dl\">'<\/span> <span class=\"p\">);<\/span>\r\n<\/span><span class=\"hil\"><span class=\"o\">+ <\/span>     <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"p\">{<\/span>\r\n<\/span><span class=\"hil\"><span class=\"o\">+ <\/span>       <span class=\"k\">if <\/span><span class=\"p\">(<\/span><span class=\"nx\">result<\/span><span class=\"p\">.<\/span><span class=\"nx\">paymentIntent<\/span><span class=\"p\">?.<\/span><span class=\"nx\">status<\/span> <span class=\"o\">===<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">succeeded<\/span><span class=\"dl\">'<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n<\/span><span class=\"hil\"><span class=\"o\">+ <\/span>         <span class=\"nf\">alert<\/span><span class=\"p\">(<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">success<\/span><span class=\"dl\">'<\/span> <span class=\"p\">);<\/span>\r\n<\/span><span class=\"hil\"><span class=\"o\">+ <\/span>       <span class=\"p\">}<\/span>\r\n<\/span><span class=\"hil\"><span class=\"o\">+ <\/span>     <span class=\"p\">}<\/span>\r\n<\/span><span class=\"hil\"><span class=\"o\">+ <\/span>   <span class=\"p\">});<\/span>\r\n<\/span><span class=\"hil\"><span class=\"o\">+ <\/span> <span class=\"p\">}<\/span>\r\n<\/span><span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<p>\u6211\u5011\u5229\u7528ViewChild\uff0c\u5728ngx-stripe\u63d0\u4f9b\u7684Payment Element\u7d44\u4ef6\u4e2d\u7372\u53d6\u5b58\u53d6\u6b0a\u9650\u3002<\/p>\n<p>\u968f\u540e\uff0c\u6b63\u5728\u901a\u8fc7ngx-stripe\u7684StripeService\u63d0\u4f9b\u7684Stripe.js\u65b9\u6cd5confirmPayment\u6267\u884c\u3002<\/p>\n<p>\u5c06\u6b64pay\u65b9\u6cd5\u4e0eform\u7684submit\u4e8b\u4ef6\u5173\u8054\u8d77\u6765\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"hdl\">-<span class=\"nt\">&lt;form&gt;<\/span>\r\n<\/span><span class=\"hil\">+<span class=\"nt\">&lt;form<\/span> <span class=\"na\">(ngSubmit)=<\/span><span class=\"s\">\"pay()\"<\/span><span class=\"nt\">&gt;<\/span>\r\n<\/span>  <span class=\"nt\">&lt;ng-container<\/span> <span class=\"na\">*ngIf=<\/span><span class=\"s\">\"clientSecret\"<\/span><span class=\"nt\">&gt;<\/span>\r\n    <span class=\"nt\">&lt;ngx-stripe-payment<\/span> <span class=\"na\">[clientSecret]=<\/span><span class=\"s\">\"clientSecret\"<\/span><span class=\"nt\">&gt;<\/span>\r\n    <span class=\"nt\">&lt;\/ngx-stripe-payment&gt;<\/span>\r\n    <span class=\"nt\">&lt;button<\/span> <span class=\"na\">type=<\/span><span class=\"s\">\"submit\"<\/span><span class=\"nt\">&gt;<\/span>\u652f\u6255\u3046<span class=\"nt\">&lt;\/button&gt;<\/span>\r\n  <span class=\"nt\">&lt;\/ng-container&gt;<\/span>\r\n<span class=\"nt\">&lt;\/form&gt;<\/span>\r\n\r\n<\/code><\/pre>\n<p>\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528Stripe\u63d0\u4f9b\u7684\u201c\u6d4b\u8bd5\u5361\u53f7\u201d\u6765\u8fdb\u884c\u652f\u4ed8\u6d4b\u8bd5\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>\u53ea\u8981\u6210\u529f\u51fa\u73b0\uff0c\u5c31\u8868\u793a\u5b9e\u65bd\u5df2\u5b8c\u6210\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d36f237434c4406c715d9\/57-0.png\" alt=\"\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8 2022-11-30 19.49.22.png\" \/><\/div>\n<h2>\u5982\u679c\u60f3\u8981\u521b\u5efa\u8ba2\u9605\u7533\u8bf7\u8868\u683c\u3002<\/h2>\n<p>\u73b0\u5728\u6211\u4eec\u4e5f\u53ef\u4ee5\u5229\u7528\u8fd9\u6b21\u7684\u5b9e\u65bd\u6765\u586b\u5199\u8ba2\u9605\u7533\u8bf7\u8868\u683c\u3002<\/p>\n<p>\u8ba9\u6211\u4eec\u5c06\u521b\u5efaPayment Intent\u7684\u5904\u7406\u90e8\u5206\u66f4\u6539\u4e3a\u4ee5\u4e0b\u4ee3\u7801\u3002<\/p>\n<pre class=\"post-pre\"><code>    <span class=\"kd\">const<\/span> <span class=\"nx\">subscription<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"nx\">stripe<\/span><span class=\"p\">.<\/span><span class=\"nx\">subscriptions<\/span><span class=\"p\">.<\/span><span class=\"nf\">create<\/span><span class=\"p\">({<\/span>\r\n        <span class=\"na\">customer<\/span><span class=\"p\">:<\/span> <span class=\"nx\">customer<\/span><span class=\"p\">.<\/span><span class=\"nx\">id<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"na\">items<\/span><span class=\"p\">:<\/span> <span class=\"p\">[{<\/span>\r\n            <span class=\"na\">price_data<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n                <span class=\"na\">unit_amount<\/span><span class=\"p\">:<\/span> <span class=\"mi\">1000<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"na\">currency<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">jpy<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"na\">recurring<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n                    <span class=\"na\">interval<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">month<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"p\">},<\/span>\r\n                <span class=\"na\">product<\/span><span class=\"p\">:<\/span> <span class=\"nx\">product<\/span><span class=\"p\">.<\/span><span class=\"nx\">id<\/span>\r\n            <span class=\"p\">}<\/span>\r\n        <span class=\"p\">}],<\/span>\r\n        <span class=\"na\">payment_behavior<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">default_incomplete<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"na\">expand<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span><span class=\"dl\">'<\/span><span class=\"s1\">latest_invoice.payment_intent<\/span><span class=\"dl\">'<\/span><span class=\"p\">],<\/span>\r\n        <span class=\"na\">payment_settings<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"na\">save_default_payment_method<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">on_subscription<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"p\">},<\/span>\r\n    <span class=\"p\">})<\/span>\r\n\r\n    <span class=\"k\">return<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"na\">clientSecret<\/span><span class=\"p\">:<\/span> <span class=\"p\">((<\/span><span class=\"nx\">subscription<\/span><span class=\"p\">.<\/span><span class=\"nx\">latest_invoice<\/span> <span class=\"k\">as<\/span> <span class=\"nx\">Stripe<\/span><span class=\"p\">.<\/span><span class=\"nx\">Invoice<\/span><span class=\"p\">).<\/span><span class=\"nx\">payment_intent<\/span> <span class=\"k\">as<\/span> <span class=\"nx\">Stripe<\/span><span class=\"p\">.<\/span><span class=\"nx\">PaymentIntent<\/span><span class=\"p\">).<\/span><span class=\"nx\">client_secret<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<p>\u5373\u4f7f\u5728Stripe\u7684\u8ba2\u9605\u4e2d\uff0c\u9996\u6b21\u652f\u4ed8\u91d1\u989d\u4e5f\u4f1a\u5728\u5185\u90e8\u751f\u6210\u652f\u4ed8\u610f\u56fe\u3002<\/p>\n<p>\u56e0\u6b64\uff0c\u60a8\u53ef\u4ee5\u83b7\u53d6\u521b\u5efa\u7684Payment Intent\u7684clientSecret\uff0c\u5e76\u5c06\u5176\u8fd4\u56de\u7ed9\u524d\u7aef\uff0c\u4ece\u800c\u5b9e\u73b0\u5728Angular\u4fa7\u5904\u7406\u8ba2\u9605\u7533\u8bf7\uff0c\u800c\u65e0\u9700\u66f4\u6539\u8868\u5355\u7684\u5b9e\u73b0\u65b9\u5f0f\u3002<\/p>\n<p>\u6b64\u5916\uff0c\u5728\u5b9e\u9645\u7684\u5d4c\u5165\u5f0f\u7cfb\u7edf\u4e2d\uff0c\u9700\u8981\u6ee1\u8db3\u7279\u5b9a\u7684\u5546\u4e1a\u4ea4\u6613\u6cd5\u7b49\u8981\u6c42\u3002<\/p>\n<p>\u8bf7\u53c2\u8003\u6d88\u8d39\u8005\u673a\u6784\u7684PDF\u7b49\u6587\u4ef6\uff0c\u4e00\u8d77\u8fdb\u884c\u7ec7\u5165\u9664\u8868\u5355\u5916\u7684\u7ec4\u4ef6\u3002<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u672c\u6587\u662fAngular Advent Calendar 2022 \u7b2c18\u5929\u7684\u6587\u7ae0\u3002 \u5982\u679c\u60a8\u5728Angular\u4e2d\u5f00\u53d1 [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-38801","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u5728Angular\u4e2d\u4f7f\u7528ngx-stripe\u5c06Stripe\u7684\u652f\u4ed8\u8868\u5355\u5d4c\u5165\u5230\u5e94\u7528\u7a0b\u5e8f\u4e2d\u7684\u65b9\u6cd5 - Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/\u5728angular\u4e2d\u4f7f\u7528ngx-stripe\u5c06stripe\u7684\u652f\u4ed8\u8868\u5355\u5d4c\u5165\u5230\u5e94\u7528\u7a0b\u5e8f\u4e2d\u7684\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u5728Angular\u4e2d\u4f7f\u7528ngx-stripe\u5c06Stripe\u7684\u652f\u4ed8\u8868\u5355\u5d4c\u5165\u5230\u5e94\u7528\u7a0b\u5e8f\u4e2d\u7684\u65b9\u6cd5\" \/>\n<meta property=\"og:description\" content=\"\u672c\u6587\u662fAngular Advent Calendar 2022 \u7b2c18\u5929\u7684\u6587\u7ae0\u3002 \u5982\u679c\u60a8\u5728Angular\u4e2d\u5f00\u53d1 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u5728angular\u4e2d\u4f7f\u7528ngx-stripe\u5c06stripe\u7684\u652f\u4ed8\u8868\u5355\u5d4c\u5165\u5230\u5e94\u7528\u7a0b\u5e8f\u4e2d\u7684\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-07-08T09:49:52+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-05-04T02:42:43+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d36f237434c4406c715d9\/19-0.png\" \/>\n<meta name=\"author\" content=\"\u6e05, \u5b87\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u6e05, \u5b87\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8angular%e4%b8%ad%e4%bd%bf%e7%94%a8ngx-stripe%e5%b0%86stripe%e7%9a%84%e6%94%af%e4%bb%98%e8%a1%a8%e5%8d%95%e5%b5%8c%e5%85%a5%e5%88%b0%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e4%b8%ad%e7%9a%84\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8angular%e4%b8%ad%e4%bd%bf%e7%94%a8ngx-stripe%e5%b0%86stripe%e7%9a%84%e6%94%af%e4%bb%98%e8%a1%a8%e5%8d%95%e5%b5%8c%e5%85%a5%e5%88%b0%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e4%b8%ad%e7%9a%84\/\",\"name\":\"\u5728Angular\u4e2d\u4f7f\u7528ngx-stripe\u5c06Stripe\u7684\u652f\u4ed8\u8868\u5355\u5d4c\u5165\u5230\u5e94\u7528\u7a0b\u5e8f\u4e2d\u7684\u65b9\u6cd5 - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-07-08T09:49:52+00:00\",\"dateModified\":\"2024-05-04T02:42:43+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/1a6ecd3d914d22a5ac32791ffc1fbd8e\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8angular%e4%b8%ad%e4%bd%bf%e7%94%a8ngx-stripe%e5%b0%86stripe%e7%9a%84%e6%94%af%e4%bb%98%e8%a1%a8%e5%8d%95%e5%b5%8c%e5%85%a5%e5%88%b0%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e4%b8%ad%e7%9a%84\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8angular%e4%b8%ad%e4%bd%bf%e7%94%a8ngx-stripe%e5%b0%86stripe%e7%9a%84%e6%94%af%e4%bb%98%e8%a1%a8%e5%8d%95%e5%b5%8c%e5%85%a5%e5%88%b0%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e4%b8%ad%e7%9a%84\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8angular%e4%b8%ad%e4%bd%bf%e7%94%a8ngx-stripe%e5%b0%86stripe%e7%9a%84%e6%94%af%e4%bb%98%e8%a1%a8%e5%8d%95%e5%b5%8c%e5%85%a5%e5%88%b0%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e4%b8%ad%e7%9a%84\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u5728Angular\u4e2d\u4f7f\u7528ngx-stripe\u5c06Stripe\u7684\u652f\u4ed8\u8868\u5355\u5d4c\u5165\u5230\u5e94\u7528\u7a0b\u5e8f\u4e2d\u7684\u65b9\u6cd5\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/1a6ecd3d914d22a5ac32791ffc1fbd8e\",\"name\":\"\u6e05, \u5b87\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/4b2016c18459a605fc469c7566608f5686491baa112d0871ee613f61b7210565?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/4b2016c18459a605fc469c7566608f5686491baa112d0871ee613f61b7210565?s=96&d=mm&r=g\",\"caption\":\"\u6e05, \u5b87\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/qingyu\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8angular%e4%b8%ad%e4%bd%bf%e7%94%a8ngx-stripe%e5%b0%86stripe%e7%9a%84%e6%94%af%e4%bb%98%e8%a1%a8%e5%8d%95%e5%b5%8c%e5%85%a5%e5%88%b0%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e4%b8%ad%e7%9a%84\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u5728Angular\u4e2d\u4f7f\u7528ngx-stripe\u5c06Stripe\u7684\u652f\u4ed8\u8868\u5355\u5d4c\u5165\u5230\u5e94\u7528\u7a0b\u5e8f\u4e2d\u7684\u65b9\u6cd5 - Blog - Silicon Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/\u5728angular\u4e2d\u4f7f\u7528ngx-stripe\u5c06stripe\u7684\u652f\u4ed8\u8868\u5355\u5d4c\u5165\u5230\u5e94\u7528\u7a0b\u5e8f\u4e2d\u7684\/","og_locale":"zh_CN","og_type":"article","og_title":"\u5728Angular\u4e2d\u4f7f\u7528ngx-stripe\u5c06Stripe\u7684\u652f\u4ed8\u8868\u5355\u5d4c\u5165\u5230\u5e94\u7528\u7a0b\u5e8f\u4e2d\u7684\u65b9\u6cd5","og_description":"\u672c\u6587\u662fAngular Advent Calendar 2022 \u7b2c18\u5929\u7684\u6587\u7ae0\u3002 \u5982\u679c\u60a8\u5728Angular\u4e2d\u5f00\u53d1 [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u5728angular\u4e2d\u4f7f\u7528ngx-stripe\u5c06stripe\u7684\u652f\u4ed8\u8868\u5355\u5d4c\u5165\u5230\u5e94\u7528\u7a0b\u5e8f\u4e2d\u7684\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-07-08T09:49:52+00:00","article_modified_time":"2024-05-04T02:42:43+00:00","og_image":[{"url":"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d36f237434c4406c715d9\/19-0.png"}],"author":"\u6e05, \u5b87","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u6e05, \u5b87","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"3 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8angular%e4%b8%ad%e4%bd%bf%e7%94%a8ngx-stripe%e5%b0%86stripe%e7%9a%84%e6%94%af%e4%bb%98%e8%a1%a8%e5%8d%95%e5%b5%8c%e5%85%a5%e5%88%b0%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e4%b8%ad%e7%9a%84\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8angular%e4%b8%ad%e4%bd%bf%e7%94%a8ngx-stripe%e5%b0%86stripe%e7%9a%84%e6%94%af%e4%bb%98%e8%a1%a8%e5%8d%95%e5%b5%8c%e5%85%a5%e5%88%b0%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e4%b8%ad%e7%9a%84\/","name":"\u5728Angular\u4e2d\u4f7f\u7528ngx-stripe\u5c06Stripe\u7684\u652f\u4ed8\u8868\u5355\u5d4c\u5165\u5230\u5e94\u7528\u7a0b\u5e8f\u4e2d\u7684\u65b9\u6cd5 - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-07-08T09:49:52+00:00","dateModified":"2024-05-04T02:42:43+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/1a6ecd3d914d22a5ac32791ffc1fbd8e"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8angular%e4%b8%ad%e4%bd%bf%e7%94%a8ngx-stripe%e5%b0%86stripe%e7%9a%84%e6%94%af%e4%bb%98%e8%a1%a8%e5%8d%95%e5%b5%8c%e5%85%a5%e5%88%b0%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e4%b8%ad%e7%9a%84\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8angular%e4%b8%ad%e4%bd%bf%e7%94%a8ngx-stripe%e5%b0%86stripe%e7%9a%84%e6%94%af%e4%bb%98%e8%a1%a8%e5%8d%95%e5%b5%8c%e5%85%a5%e5%88%b0%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e4%b8%ad%e7%9a%84\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8angular%e4%b8%ad%e4%bd%bf%e7%94%a8ngx-stripe%e5%b0%86stripe%e7%9a%84%e6%94%af%e4%bb%98%e8%a1%a8%e5%8d%95%e5%b5%8c%e5%85%a5%e5%88%b0%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e4%b8%ad%e7%9a%84\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u5728Angular\u4e2d\u4f7f\u7528ngx-stripe\u5c06Stripe\u7684\u652f\u4ed8\u8868\u5355\u5d4c\u5165\u5230\u5e94\u7528\u7a0b\u5e8f\u4e2d\u7684\u65b9\u6cd5"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/1a6ecd3d914d22a5ac32791ffc1fbd8e","name":"\u6e05, \u5b87","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/4b2016c18459a605fc469c7566608f5686491baa112d0871ee613f61b7210565?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/4b2016c18459a605fc469c7566608f5686491baa112d0871ee613f61b7210565?s=96&d=mm&r=g","caption":"\u6e05, \u5b87"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/qingyu\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8angular%e4%b8%ad%e4%bd%bf%e7%94%a8ngx-stripe%e5%b0%86stripe%e7%9a%84%e6%94%af%e4%bb%98%e8%a1%a8%e5%8d%95%e5%b5%8c%e5%85%a5%e5%88%b0%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e4%b8%ad%e7%9a%84\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/38801","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=38801"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/38801\/revisions"}],"predecessor-version":[{"id":97844,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/38801\/revisions\/97844"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=38801"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=38801"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=38801"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}