Angular 使用Paypal自定义客户端Id
我正在我的Angular项目中实现PayPal的智能支付按钮。我知道在我的index.html文件中有以下脚本: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
<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。