Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >PayPal智能按钮INVALID_RESOURCE_ID

PayPal智能按钮INVALID_RESOURCE_ID
EN

Stack Overflow用户
提问于 2020-06-29 08:03:24
回答 1查看 684关注 0票数 0

我试图通过使用SmartButtonsserver side中创建订单来集成我的网站上的PayPal支付。

在遵循文档中的步骤之后,比如初始化按钮,然后通过设置服务器端代码来创建orderID,当我尝试付款时,我在客户端得到以下错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Error: INVALID_RESOURCE_ID↵    at https://www.sandbox.paypal.com/smart/buttons?style.label=paypal&style.layout=horizontal&style.color=gold&style.shape=rect&style.tagline=false&style.height=52&components.0=buttons&locale.country...

在客户端收到的orderID是正确的,因为它与在paypal仪表板上创建的相同。在阅读了其他一些类似的问题后,有人说要捕获支付onApprove,但即使在设置了捕获支付的接口之后,请求也没有进入到捕获支付的API中。

我的按钮代码如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var PAYPAL_SCRIPT = 'https://www.paypal.com/sdk/js?client-id=XXXXXX&currency=EUR';
var script = document.createElement('script');
script.setAttribute('src', PAYPAL_SCRIPT);
script.onload = function(){
    paypal.Buttons({
        style: {
            shape: 'rect',
            color: 'gold',
            layout: 'horizontal',
            label: 'paypal',
            tagline: false,
            height: 52
        },
        createOrder: function() {
            return fetch('https://localhost:44350/payment/paypal/order/create/', {
              method: 'post',
              headers: {
                'content-type': 'application/json'
              }
            }).then(function(res) {
              return res.json();
            }).then(function(data) {
              return data.headers[2].Value[0]; // Use the same key name for order ID on the client and server
            });
        },
        onApprove: function(data, actions) {
          return fetch('https://localhost:44350/payment/paypal/' + data.headers[2].Value[0] + '/capture/', {
            method: 'post'
        }).then(function(res) {
            return res.json();
        }).then(function(details) {
            // Show a success message to the buyer
            alert('Transaction completed by ' + details.payer.name.given_name + '!');
        });
        }
    }).render('#paypal-button-container');
}
document.head.appendChild(script);

然后我的api控制器如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    [HttpPost("paypal/order/create/")]
    public Task<HttpResponse> PayPal()
    {
        
        return PaypalHelper.CreateOrder("XXXXX", "XXXXXX", true);
    }

    [HttpPost("paypal/{orderID}/capture/")]
    public Task<HttpResponse> PayPal(string orderID)
    {

        return PaypalHelper.CaptureOrder(orderID, "XXXXX", "XXXXX", true);
    }

其中创建订单的方法如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 public async static Task<HttpResponse> CreateOrder(string publickey, string privatekey, bool debug = false)
        {
            var request = new OrdersCreateRequest();
            request.Prefer("return=representation");
            request.RequestBody(BuildRequestBody());
            //3. Call PayPal to set up a transaction
            var response = await PayPalClient.client(publickey, privatekey).Execute(request);

            if (debug)
            {
                var result = response.Result<Order>();
                Console.WriteLine("Status: {0}", result.Status);
                Console.WriteLine("Order Id: {0}", result.Id);
                Console.WriteLine("Intent: {0}", result.CheckoutPaymentIntent);
                Console.WriteLine("Links:");
                foreach (LinkDescription link in result.Links)
                {
                    Console.WriteLine("\t{0}: {1}\tCall Type: {2}", link.Rel, link.Href, link.Method);
                }
                AmountWithBreakdown amount = result.PurchaseUnits[0].AmountWithBreakdown;
                Console.WriteLine("Total Amount: {0} {1}", amount.CurrencyCode, amount.Value);
            }

            return response;
        }

        private static OrderRequest BuildRequestBody()
        {
            var order = new OrderRequest()
            {
                CheckoutPaymentIntent = "CAPTURE",
                PurchaseUnits = new List<PurchaseUnitRequest>()
                {
                    new PurchaseUnitRequest()
                    {
                        AmountWithBreakdown = new AmountWithBreakdown()
                        {
                            CurrencyCode = "EUR",
                            Value = "100.00"
                        }
                    }
                },
                ApplicationContext = new ApplicationContext()
                {
                    ReturnUrl = "https://www.example.it/vmenu?paypal=success",
                    CancelUrl = "https://www.example.com?paypal=error"
                }
            };

            return order;
        }

createOrder fetch中的数据如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{headers: Array(3), statusCode: 201}headers: Array(3)0: {Key: "Cache-Control", Value: Array(1)}1: {Key: "Date", Value: Array(1)}2: Key: "Paypal-Debug-Id"Value: ["97fcfafaae8ef"]__proto__: Objectlength: 3__proto__: Array(0)statusCode: 201__proto__: Object
menu_test.js:33

而通过获取data.headers[2].Value[0],结果是97fcfafaae8ef

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-29 11:06:25

您传递的ID错误。贝宝调试Id不是orderID。

同样,orderID不会在头中返回,它们在主体中返回,作为'id‘。

您可以在此处查看示例响应:https://developer.paypal.com/docs/api/orders/v2/#orders_create

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62633683

复制
相关文章
GCC、ARM-LINUX-GCC、ARM-ELF-GCC浅析
The GNU Compiler Collection,通常简称GCC,是一套由GNU开发的编译器集,为什么是编辑器集而不是编译器呢?那是因为它不仅支持C语言编译,还支持C++, Ada, Objective C等许多语言。另外GCC对硬件平台的支持,可以所无所不在,它不仅支持X86处理器架构, 还支持ARM, Motorola 68000, Motorola 8800, Atmel AVR, MIPS等处理器架构。
全栈程序员站长
2022/07/18
6.8K0
GCC 优化级别
1. gcc中指定优化级别的参数有:-O0、-O1、-O2、-O3、-Og、-Os、-Ofast。
KINGYT
2019/10/22
8.1K0
第009课 gcc和arm-linux-gcc和Makefile
hello.c(预处理)->hello.i(编译)->hello.s(汇编)->hello.o(链接)->hello
韦东山
2020/09/30
4.9K0
第009课 gcc和arm-linux-gcc和Makefile
【图片+代码】:GCC 链接过程中的【重定位】过程分析
最近因为项目上的需要,利用动态链接库来实现一个插件系统,顺便就复习了一下关于Linux中一些编译、链接相关的内容。
IOT物联网小镇
2022/04/06
8140
【图片+代码】:GCC 链接过程中的【重定位】过程分析
arm-gcc各版本区别
从本质来讲他们都是编译器,而gcc是linux系统下面用来将代码编译成一个可执行程序的手段。编译出来的是适用于linux系统的可执行二进制文件。可执行程序其实就是一堆的0101二进制机器码。这些机器码代表什么含义只有机器本身能理解。所以你用gcc编译出来的可执行程序只有在linux系统下面可以运行。
云深无际
2020/08/12
3.4K0
arm-gcc各版本区别
Ubuntu18.04安装arm-linux-gcc交叉编译工具(附arm-linux-gcc 5.4.0包)
下载(百度云)链接:https://pan.baidu.com/s/1AeqzkboWkJDJjU9HxtXhrA 提取码:uzup
全栈程序员站长
2022/06/28
4.3K0
Ubuntu18.04安装arm-linux-gcc交叉编译工具(附arm-linux-gcc 5.4.0包)
GCC编译优化选项
查看GCC各选项打开的优化项:gcc -Q --help=optimizers。分为如下:
叫你不戴帽子
2019/01/03
8K0
arm-linux-gcc 4.3.2编译uboot 1.1.6
在第三期项目的视频中,官方提供了一整套新的工具链,bootloader, 内核和文件系统(arm-linux-gcc_4.3.2, uboot-2012.04.01, linux-3.4.2)其中uboot-2012.04.01来源于毕业班,其下载烧写功能远不如uboot-1.1.6,因此我更偏向于使用老版的Uboot。但是第三期的工具链却无法直接编译uboot-1.1.6, 现在将解决这一问题。
韦东山
2022/09/08
2.8K0
qt交叉编译环境搭建_arm linux gcc
AArch64 是随 ARMv8 ISA 一起引入的 64 位架构,用于执行 A64 指令的计算机。而且在 AArch64 状态下执行的代码只能使用 A64 指令集。,而不能执行 A32 或 T32 指令。但是,与 AArch32 中不同,在64位状态下,指令可以访问 64 位和 32 位寄存器。
全栈程序员站长
2022/11/07
6.6K0
qt交叉编译环境搭建_arm linux gcc
Linux系统中使用GCC CPU参数优化代码编译
在编译程序时,借助参数传递的方法,使用与系统CPU相匹配的gcc参数,编译出的程序就是为系统CPU而进行特定优化过的,因而执行速度和效率都会是最好。
一见
2018/08/07
2.4K0
arm 开发板更新 gcc/gcc++ | Debain 更新 gcc,无需编译直接更新 gcc
网上的方法,大多是copy的,要下载gcc源码包,然后编译。我想说,你就算用 8G 内存的电脑,解压、配置、编译,没几个小时搞不来。
痴者工良
2021/04/26
7990
ARM 之七 主流编译器(armcc、iar、gcc for arm、LLVM(clang))详细介绍[通俗易懂]
  在讲解各编译器之前,必须先了解一下以下这些文件。这些文件在编译器目录下或者编译生成目标平台的可执行程序时经常见到。此外,还需要注意区分 Windows 平台 和 Linux 平台的文件。
全栈程序员站长
2022/06/28
15.5K0
ARM 之七 主流编译器(armcc、iar、gcc for arm、LLVM(clang))详细介绍[通俗易懂]
STM32高级开发——gcc-arm-none-eabi
素材来源:https://blog.csdn.net/zhengyangliu123/article/details/54783443
李肖遥
2022/12/22
1.4K0
STM32高级开发——gcc-arm-none-eabi
遍历ArrayList的过程中移除元素的方式
原因:在匹配到第一个要删除的元素并移除时,后面元素会往前移位,导致索引位置改变,从而漏掉后面一个元素。
全栈程序员站长
2022/09/15
6180
GCC生成的汇编代码
GCC产生的汇编代码有点难读,它包含一些我们不关心的信息。所有以 "." 开头的行都是指导汇编器和链接器的命令,称为“汇编器命令”。
Java架构师必看
2021/03/22
2.2K0
GCC生成的汇编代码
在arm上编译php
其实在arm上编译php和在x86没有太大区别,主要是很多依赖都需要重新编译,这里拿openssl和curl举例。
老高的技术博客
2022/12/29
1K0
在centos中更新gcc到6.4.0
本文由腾讯云+社区自动同步,原文地址 http://blogtest.stackoverflow.club/update-gcc-in-centos/
羽翰尘
2019/11/21
1.1K0
Ubuntu 14.04 LTS下使用arm-linux-gcc交叉编译OpenCV 2.4.9
本文介绍了如何将OpenCV库移植到ARM平台上,包括编译工具链、依赖库、配置方法以及运行时注意事项。
剑影啸清寒
2018/01/02
9.5K1
Ubuntu 14.04 LTS下使用arm-linux-gcc交叉编译OpenCV 2.4.9
点击加载更多

相似问题

GCC ARM乘法优化

223

GCC优化:使用ARM条件指令?

27

停止ARM GCC优化函数调用

217

gcc代码的ARM源代码

15

GCC优化移除功能序言与启示

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文