Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 使用Paypal自定义客户端Id_Angular_Paypal - Fatal编程技术网

Angular 使用Paypal自定义客户端Id

Angular 使用Paypal自定义客户端Id,angular,paypal,Angular,Paypal,我正在我的Angular项目中实现PayPal的智能支付按钮。我知道在我的index.html文件中有以下脚本: <script src="https://www.paypal.com/sdk/js?client-id=MY_CLIENT_ID"> </script> 我不相信商家id是我要找的,因为我知道企业的客户id,我只是不能硬编码,但我不确定。谢谢您的帮助。我会创建一个类似这样的PayPalService,并从组件调用它 import { DOCUM

我正在我的Angular项目中实现PayPal的智能支付按钮。我知道在我的index.html文件中有以下脚本:

<script
    src="https://www.paypal.com/sdk/js?client-id=MY_CLIENT_ID">
  </script>

我不相信商家id是我要找的,因为我知道企业的客户id,我只是不能硬编码,但我不确定。谢谢您的帮助。

我会创建一个类似这样的
PayPalService
,并从组件调用它

import { DOCUMENT } from '@angular/common';
import { Inject, Injectable } from '@angular/core';
import { fromEvent, Observable } from 'rxjs';
import { first } from 'rxjs/operators';

@Injectable({
  providedIn: 'root'
})
export class PaypalService {
  constructor(
    @Inject(DOCUMENT)
    private document: Document
  ) {}

  public initiate(clientId: string): Observable<void> {
    const paypalScriptElement: HTMLScriptElement = this.document.createElement('script');

    paypalScriptElement.src = `https://www.paypal.com/sdk/js?client-id=${clientId}`;
    paypalScriptElement.id = 'paypal-script';

    this.document.head.appendChild(paypalScriptElement);

    return fromEvent<void>(paypalScriptElement, 'load').pipe(first());
  }

  public remove(): void {
    const paypalScriptElement = this.document.getElementById('paypal-script');

    this.document.head.removeChild(paypalScriptElement);
  }
}
确保在组件的
ngondestory
中调用
this.paypalService.remove()

import { DOCUMENT } from '@angular/common';
import { Inject, Injectable } from '@angular/core';
import { fromEvent, Observable } from 'rxjs';
import { first } from 'rxjs/operators';

@Injectable({
  providedIn: 'root'
})
export class PaypalService {
  constructor(
    @Inject(DOCUMENT)
    private document: Document
  ) {}

  public initiate(clientId: string): Observable<void> {
    const paypalScriptElement: HTMLScriptElement = this.document.createElement('script');

    paypalScriptElement.src = `https://www.paypal.com/sdk/js?client-id=${clientId}`;
    paypalScriptElement.id = 'paypal-script';

    this.document.head.appendChild(paypalScriptElement);

    return fromEvent<void>(paypalScriptElement, 'load').pipe(first());
  }

  public remove(): void {
    const paypalScriptElement = this.document.getElementById('paypal-script');

    this.document.head.removeChild(paypalScriptElement);
  }
}

另外,请确保从
index.html
中删除任何硬编码的PayPal脚本标记,因为它现在将以编程方式添加。

我将创建一个类似这样的
PayPalService
并从组件中调用它

import { DOCUMENT } from '@angular/common';
import { Inject, Injectable } from '@angular/core';
import { fromEvent, Observable } from 'rxjs';
import { first } from 'rxjs/operators';

@Injectable({
  providedIn: 'root'
})
export class PaypalService {
  constructor(
    @Inject(DOCUMENT)
    private document: Document
  ) {}

  public initiate(clientId: string): Observable<void> {
    const paypalScriptElement: HTMLScriptElement = this.document.createElement('script');

    paypalScriptElement.src = `https://www.paypal.com/sdk/js?client-id=${clientId}`;
    paypalScriptElement.id = 'paypal-script';

    this.document.head.appendChild(paypalScriptElement);

    return fromEvent<void>(paypalScriptElement, 'load').pipe(first());
  }

  public remove(): void {
    const paypalScriptElement = this.document.getElementById('paypal-script');

    this.document.head.removeChild(paypalScriptElement);
  }
}
确保在组件的
ngondestory
中调用
this.paypalService.remove()

import { DOCUMENT } from '@angular/common';
import { Inject, Injectable } from '@angular/core';
import { fromEvent, Observable } from 'rxjs';
import { first } from 'rxjs/operators';

@Injectable({
  providedIn: 'root'
})
export class PaypalService {
  constructor(
    @Inject(DOCUMENT)
    private document: Document
  ) {}

  public initiate(clientId: string): Observable<void> {
    const paypalScriptElement: HTMLScriptElement = this.document.createElement('script');

    paypalScriptElement.src = `https://www.paypal.com/sdk/js?client-id=${clientId}`;
    paypalScriptElement.id = 'paypal-script';

    this.document.head.appendChild(paypalScriptElement);

    return fromEvent<void>(paypalScriptElement, 'load').pipe(first());
  }

  public remove(): void {
    const paypalScriptElement = this.document.getElementById('paypal-script');

    this.document.head.removeChild(paypalScriptElement);
  }
}

另外,请确保从
index.html
中删除任何硬编码的PayPal脚本标记,因为它现在将以编程方式添加。

我将与v2/orders进行基于API的服务器端集成

对于前端,您将使用以下内容(前端中的客户端id可以是您自己的):

这是最健壮的解决方案,也是所有主要购物车平台都使用的解决方案


在后端,您有两个选项。您可以使用自己的客户id/secret,并使用
收款人
对象指定接收人:——但是,由于您显然知道接收人的客户id和密码,因此您似乎应该可以直接使用它们


无论如何,要与前端代码配对,您需要实现的两条路径是“设置事务”和“捕获事务”,记录在这里:

我将与v2/orders进行基于API的服务器端集成

对于前端,您将使用以下内容(前端中的客户端id可以是您自己的):

这是最健壮的解决方案,也是所有主要购物车平台都使用的解决方案


在后端,您有两个选项。您可以使用自己的客户id/secret,并使用
收款人
对象指定接收人:——但是,由于您显然知道接收人的客户id和密码,因此您似乎应该可以直接使用它们


无论如何,要与前端代码配对,您需要实现的两条路径是“设置事务”和“捕获事务”,记录在此处:

感谢您的快速回复。我确定我需要客户Id,但现在我不确定。我在沙盒业务帐户中使用的帐户ID是13位字符串,但它给了我一个错误。这是正确的帐户Id还是我需要商户Id才能通过该业务帐户进行交易。我尝试将客户Id设置为我的客户Id,并将商户Id设置为我的另一个沙箱业务帐户的Id,但资金流向设置了客户Id的帐户,而不是设置了商户Id的帐户。商户Id有什么意义?我不确定。您可能需要查阅PayPal的文档。hi@AaronAdrian,如果我试图使用
PayPal.Buttons
我得到
找不到名称“PayPal”
错误,我如何解决它?我应该创建一个名为paypal的变量吗?@IgorMytyuk这是一个很好的问题。添加
声明var贝宝到您使用PayPal的任何文件的顶部。感谢您的快速回复。我确定我需要客户Id,但现在我不确定。我在沙盒业务帐户中使用的帐户ID是13位字符串,但它给了我一个错误。这是正确的帐户Id还是我需要商户Id才能通过该业务帐户进行交易。我尝试将客户Id设置为我的客户Id,并将商户Id设置为我的另一个沙箱业务帐户的Id,但资金流向设置了客户Id的帐户,而不是设置了商户Id的帐户。商户Id有什么意义?我不确定。您可能需要查阅PayPal的文档。hi@AaronAdrian,如果我试图使用
PayPal.Buttons
我得到
找不到名称“PayPal”
错误,我如何解决它?我应该创建一个名为paypal的变量吗?@IgorMytyuk这是一个很好的问题。添加
声明var贝宝到您使用PayPal的任何文件的顶部。感谢您的坦率。你能告诉我关于构建一个合适的v2/orders API后端的资源吗,因为我认为这是我必须要做的。再次感谢您的回复。以下是指南:有关详细信息,请参阅左侧链接的Orders API参考。再次感谢您的参考。我还有一个问题。从我的观点来看,我代表其他用户付款的唯一方式似乎是完成这项工作:但似乎我要过几个月才能获得批准。我需要能够在下周内迅速付款,所以你知道有其他选择吗,或者我的做法是错误的?你答案中的链接实际上在前端代码中包含了客户ID。在JS的第15行,您可以看到正在传递客户端ID。感谢您的坦率。你能告诉我关于构建一个合适的v2/orders API后端的资源吗,因为我认为这是我必须要做的。再次感谢您的回复。以下是指南:有关详细信息,请参阅左侧链接的Orders API参考。再次感谢您的参考。我还有一个问题。从我的观点来看,我代表其他用户付款的唯一方式似乎是完成这项工作:但似乎我要过几个月才能获得批准。我需要能够在下周内迅速付款,所以你知道有其他选择吗,或者我的做法是错误的?你答案中的链接实际上在前端代码中包含了客户ID。在JS的第15行,您可以看到正在传递客户端ID。