我正在做一场真正的噩梦,试图让 PesaPal API 使用 Ruby 为我工作......
我很欣赏它可能不是最常用的 API,但如果这里有人在线上有更多使用 OAuth 的经验,和/或 PHP 经验可以提供一双新的眼睛,我会很感激。
所以 PesaPal 开发者网站在这里:http: //developer.pesapal.com 他们的API 文档并没有提供太多关于如何在他们的网站上使用 OAuth 的线索,而且我对 PHP 的理解还不够好,无法确定我已经正确阅读了他们的PHP 示例。
这是我在 Ruby 中实现这一点的尝试:
require 'oauth'
require 'uri'
key = '<my sandbox key>'
sec = '<my sandbox secret>'
API_DOMAIN = 'https://demo.pesapal.com'
# An XML string of param data to include with our request
RAW_XML = %{<?xml version=\"1.0\" encoding=\"utf-8\"?><PesapalDirectOrderInfo xmlns:xsi=\"http://www.w3.org/2001/XMLSchemainstance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" Amount=\"12.34\" Description=\"Bob Test 1\" Type=\"MERCHANT\" Reference=\"808\" FirstName=\"Bo\" LastName=\"Tester\" Email=\"bodacious@bodacious.com\" xmlns=\"http://www.pesapal.com\" />}
# Escape the XML
@post_xml = URI.escape(RAW_XML)
# Create a new OAuth Consumer
@consumer = OAuth::Consumer.new(key, sec, {
site: API_DOMAIN,
scheme: :query_string
})
# The signed request object
@signed_request = @consumer.create_signed_request('get', "#{API_DOMAIN}/API/PostPesapalDirectOrderV4")
# Join the pesapal_request_data and oauth_callback with '&' for valid URL params
@params = {
oauth_callback: URI.escape('http://localhost:3000'),
pesapal_request_data: @post_xml,
}.map { |k,v| "#{k}=#{v}" }.join('&')
# This is the URL we should redirect to
puts redirect_url = "#{@signed_request.path}&#{@params}"
当我尝试访问此代码返回的 URL 时,我得到:Problem: signature_invalid | Advice: > |
从 API 返回。
谁能想到我在这里做错了什么?
谢谢