在会计系统内对存款进行核对,从运行 Shopify Payments(或其他方式)的 Shopify 商店进入 Shopify 用户的银行帐户,这似乎是人们经常根据数字偶然发现 \xe2\x80\x94 的事情之一有关 Shopify 支持社区论坛上的主题的请求,例如: https: //community.shopify.com/c/Shopify-APIs-SDKs/Fees-charged-by-Shopify-via-API/mp/265261 /
\n\n问题(对于会计)是 Shopify Payments在将交易余额存入店主的账户之前删除了费用金额(有关费用的完整列表,请参阅:https: //www.shopify.com/pricing )银行账户。
\n\nShopify 费用通常如下所示:2.6% of transaction value + $0.30
根据上述内容计算应收取的费用非常简单(对费用表进行硬编码),直到这些费用在未来某个时候发生变化。
\n\n对于许多可用的简单集成,这会导致打入银行帐户的发票金额与我们根据通过 Shopify 轻松检索的 Shopify 发票金额“预期”打入银行帐户的金额之间存在差异。的 API 由许多此类解决方案提供。
\n\n这种差异意味着基于会计的用户有必要手动推断哪个 Shopify 发票与哪个传入银行存款 \xe2\x80\x94\xc2\xa0 相关联,然后手动添加一个负行项目来计算差额/余额图书。
\n\n\n\n\n这是几个不同的会计系统/软件供应商(特别是 Xero 和 Quickbooks)在被问及他们的客户如何解决上述问题时提出的建议方法。
\n
我知道有一些解决方案试图解决上述所有问题(取得了不同程度的成功),但由于我目前的情况涉及大量的配套工作,这些解决方案都无法充分解决我们业务所需的其他功能。
\n\n\n\n\n我们需要能够找到费用(或者自己计算)并将这些费用添加到发票中,以便我们的会计系统期望正确的资金金额打入我们的银行帐户 \xe2\x80\x94 因此问题:如何我们可以检索当前帐户的“Shopify Payments”费用/费率吗?
\n
理想情况下,我希望避免对这些信息进行硬编码,因为 Shopify 可能会更改费用(可能只发出少量通知),这意味着到那时我们的集成就会中断。最好能够通过 API 请求检索给定帐户的费用表,从而避免费用发生变化时出现问题。
\n\n我有多个客户也面临同样的问题 \xe2\x80\x94\xc2\xa0so 我认为值得检查一下是否有人遇到/解决了问题,并讨论我当前的解决方案
\n\n我将 Xero Api 与 Nodejs 和 xero-node 库一起使用。
我已完成 oAuth 流程并将令牌保存到数据库中。我现在遇到的问题是,当尝试从 Xero 获取任何内容(联系人、帐户或用户)时,不断收到 403 禁止错误。示例代码如下
我可以毫无问题地让租户满意,但其他任何方法都行不通。我已经检查了范围,以确保在设置客户端时它们是正确的。
var getStuff = async(tokenSet) => {
await xero.setTokenSet(tokenSet);
const tenants = await xero.updateTenants();
const xeroTenantId = tenants[0].id // {String} Xero identifier for Tenant
const ifModifiedSince = new Date("2020-02-06T12:17:43.202-08:00");
const where = 'IsSubscriber==true'; // {String} Filter by an any element
const order = 'LastName ASC'; // {String} Order by an any element
console.log(tenants);
try {
const response = await xero.accountingApi.getUsers(xeroTenantId, ifModifiedSince, where, order);
console.log(response.body || …
Run Code Online (Sandbox Code Playgroud) 我使用软件包通过 Angular 7 应用程序连接到 Xero oauth 服务器“ https://login.xero.com/identity/connect/authorize ” angular-oauth2-oidc
。
在我的 authConfig 我有以下属性
export const authConfig: AuthConfig = {
issuer: 'https://login.xero.com/identity/connect/authorize',
redirectUri: 'http://127.0.0.1:2114/xerocallback',
clientId: 'XXXXXXXXXX647C2ABBAXXXXXXXXXX',
scope: 'openid profile email offline_access',
responseType: 'code',
};
Run Code Online (Sandbox Code Playgroud)
但是,一旦我初始化 oauth 服务
import { OAuthService } from 'angular-oauth2-oidc';
this.oauthService.configure(authConfig);
Run Code Online (Sandbox Code Playgroud)
我收到以下 CORS 错误
Access to XMLHttpRequest at 'https://login.xero.com/identity/connect/authorize/.well-known/openid-configuration' from origin 'http://localhost:2114' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Run Code Online (Sandbox Code Playgroud)
任何我做错了什么的想法,任何建议都会受到欢迎
我刚刚安装了这个库。PhpStorm 会执行通常的代码补全(类除外)\XeroAPI\XeroPHP\Api\AccountingApi
。\XeroAPI\XeroPHP\Api\IdentityApi
同一文件夹中的类工作得很好。
该文件相当大 - 2,560KB。如果我从类中删除大约 65,000 行中的一半(并且无论是前半部分还是后半部分都有效),那么我会恢复代码完成状态。事实上,我可以只删除最后 3,000 行左右(将文件减小到 2,499KB)并且它可以工作。
我还尝试了快速正则表达式查找/替换来删除所有@throws
PHPDoc 注释。这使得文件减少到 2,491KB,嘿,很快,代码完成就可以正常工作了。
如果我不得不猜测,我会说它不会对超过 2.5MB 的源文件或其他文件进行代码完成,但我找不到任何相关设置。
有什么方法可以让该文件完成代码,而不需要从中删除内容(无论如何,下次我进行 Composer 更新时都会恢复这些内容)?
我需要通过联系人ID获取联系人的发票,因此我编写了类似于Qusery 3(用于付款)的查询1。我的目标是从与它关联的对象Contact所属的字段查询发票。但是查询1返回0结果。
然后,我尝试了查询发票的方式,即按属于发票的字段进行查询。我指的是GitHub中的Xero C#代码示例。它正在工作,并按预期返回10个结果。
为什么我不能从ContactId字段查询发票中的联系人?
查询1(不工作-返回0个结果,预期10个结果)
var contact = _api.Contacts.Find().FirstOrDefault(c => c.AccountNumber == accountNumber);
returnInvoiceList =
_api.Invoices.Find()
.Where(c => c.Contact.Id == contact.Id)
.OrderBy(item => typeof(Invoice).GetProperty(
orderby, BindingFlags.Public | BindingFlags.Instance).GetValue(item))
.Skip(i * x)
.Take(x)
.ToList();
Run Code Online (Sandbox Code Playgroud)
查询2(工作)
returnInvoiceList =
_api.Invoices.Where(string.Format("Reference == \"{0}\"", accountNumber)).Find()
.OrderBy(item => typeof(Invoice).GetProperty(
orderby, BindingFlags.Public | BindingFlags.Instance).GetValue(item))
.Skip(i * x)
.Take(x)
.ToList();
Run Code Online (Sandbox Code Playgroud)
查询3(与查询1类似的模式查询,用于付款)
returnPaymentList =
_api.Payments.Find()
.Where(c => c.Invoice.Contact.Id == contact.Id)
.OrderBy(item => typeof(Payment).GetProperty(
orderby, BindingFlags.Public | BindingFlags.Instance).GetValue(item))
.Skip(i * x)
.Take(x)
.ToList();
Run Code Online (Sandbox Code Playgroud) 目前我在 Laravel 5.2 中使用 Xero API。我想利用 Eloquent 的强大功能来处理这些数据。
实际上,我可以恢复发票,甚至使用链接方法过滤它们,如下所示:
$invoices = XeroPrivate::load('Accounting\\Invoice')
->where('Status', 'DRAFT')
->execute();
Run Code Online (Sandbox Code Playgroud)
如果我执行 a var_dump
,我会得到这种数据:
object(XeroPHP\Remote\Collection)[173]
public 0 =>
object(XeroPHP\Models\Accounting\Invoice)[171]
protected '_data' =>
array (size=31)
'Type' => string 'ACCPAY' (length=6)
'Contact' =>
Run Code Online (Sandbox Code Playgroud)
雄辩的链接方法可以让我执行这样的事情。目前失败了:
$invoices = XeroPrivate::load('Accounting\\Invoice')
->where('Date','>','2016-03-20')
->execute();
Run Code Online (Sandbox Code Playgroud)
检查 Laravel 的文档,假设我可以使用以下命令转换为集合collect
:
$collection = collect($invoices);
Run Code Online (Sandbox Code Playgroud)
$collection
并不能解决问题。现在数据结构不同了但仍然无法使用Eloquent。现在数据是:
object(Illuminate\Support\Collection)[163]
protected 'items' =>
array (size=24)
0 =>
object(XeroPHP\Models\Accounting\Invoice)[171]
protected '_data' =>
array (size=31)
Run Code Online (Sandbox Code Playgroud)
但事实证明,数据是Illuminate\Support\Collection
正确的。
谢谢!
我正在研究在zapier中添加一个Webhook,该Webhook将使用xero开票api发送发票。Xero没有扎比动作来执行此操作。
我本来打算使用oauth-2 beta,但它的流程很复杂,对于以简单的静态设置连接到一个组织的用例来说,它并不理想。
关于如何设置的任何想法?
这是来自 Xero 的参数
{"events"=>nil,
"firstEventSequence"=>0,
"lastEventSequence"=>0,
"entropy"=>"KFDXIMNLPDAMRBOEVAVF",
"controller"=>"admin/billing/webhooks",
"action"=>"handle_hook",
"webhook"=>
{"events"=>nil,
"firstEventSequence"=>0,
"lastEventSequence"=>0,
"entropy"=>"KFDXIMNLPDAMRBOEVAVF"}}
Run Code Online (Sandbox Code Playgroud)
我想验证Intent To Receive
https://developer.xero.com/documentation/webhooks/configuring-your-server#intent
data = {"events"=>nil, "firstEventSequence"=>0, "lastEventSequence"=>0, "entropy"=>"KFDXIMNLPDAMRBOEVAVF"}
Key = HRj6QPub9BNE4MWewrcLrkKFjpiikV1KrlMZCvDawyDR95MGkkuE2y1DXFP1tifsEWaJygLx6zG0r9rXVTflcg==
Run Code Online (Sandbox Code Playgroud)
下面尝试过
Base64.encode64(OpenSSL::HMAC.digest(OpenSSL::Digest::Digest.new('sha256'), key, data)).strip()
*** TypeError Exception: no implicit conversion of ActionController::Parameters into String
Run Code Online (Sandbox Code Playgroud)
或者
hash = OpenSSL::HMAC.digest('sha256', key, data)
*** TypeError Exception: no implicit conversion of ActionController::Parameters into String
Run Code Online (Sandbox Code Playgroud)
在这里如何实现这一目标?
为了确保您收到的请求来自 Xero,您需要验证 x-xero-signature 标头中提供的签名。创建或重新启用 Webhook 订阅(或更新订阅 URL)时,系统将提示用户启动“接收意图”验证。此验证过程将是对订阅中提供的 url 的一系列 HTTPS POST 请求。
编辑 Rails 正在将空白数组转换为 nil,所以我自己制作了有效负载,根据文档看起来完全相同
data = params[:webhook]
payload = …
Run Code Online (Sandbox Code Playgroud)