mblsolutions / simfoni-php
官方Simfoni接口,适用于PHP应用程序。
Requires
- php: >=7.1|^8.0
- ext-json: *
- ext-openssl: *
- guzzlehttp/guzzle: ^6.0|^7.0
Requires (Dev)
- phpunit/phpunit: ^7.0|^9.3
- dev-master
- v3.x-dev
- v3.0.1
- v3.0.0
- v2.x-dev
- v2.6.3
- v2.6.2
- v2.6.1
- v2.6.0
- v2.5.0
- v2.4.1
- v2.4.0
- v2.3.0
- v2.2.0
- v2.1.0
- v2.0.0
- v1.0.1
- v1.0.0
- v0.2.0
- v0.1.0
- dev-Bug/v3.x-validation-exception-errors-for-some-messages-ab#44688
- dev-feature/AB#39838-update-signatature-verification
- dev-feature/D00782JB-bulk-ecodes
This package is auto-updated.
Last update: 2024-09-19 14:52:05 UTC
README
Simfoni接口为PHP应用程序提供对Simfoni平台的API接口。
内容
安装
推荐通过Composer安装Simfoni PHP。
composer require mblsolutions/simfoni-php
身份验证
请注意:您的API凭证(客户端ID、客户端密钥和访问令牌)具有许多权限。请确保这些凭证安全。不要在Github、客户端代码等地方分享这些数据。如果您认为任何凭证已被泄露,请在Simfoni应用程序界面中撤销/重置用户令牌、客户端密钥和解密密钥。
可以通过将Simfoni应用程序的客户端ID
、客户端密钥
、用户邮箱
和用户密码
传递给身份验证密码方法来进行身份验证。
$simfoniAuth = new \MBLSolutions\Simfoni\Authentication(); $authentication = $simfoniAuth->password(1, 'auth-secret', 'john.doe@exmaple.com', 'password');
成功的身份验证将返回包含访问、刷新和用户信息的OAuth响应。
[ 'token_type' => 'Bearer', 'expires_in' => 31622400, 'access_token' => 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6IjBmOGMwNDAxZDAy', 'refresh_token' => 'def5020002eca9ac7875d5d800c195024d7fb702535c0d30a0', 'user' => [ 'name' => 'John Doe', 'email' => 'john.doe@example.com', 'role' => 'programme_manager' ] ];
我们建议将此信息存储并在请求之间重用(身份验证将在身份验证签发后'31622400'秒过期)。
使用access_token
,在Simfoni配置中设置令牌。PHP库将自动将此令牌附加到每个API请求(在当前请求中,每个PHP请求都需要重新设置此令牌)。
\MBLSolutions\Simfoni\Simfoni::setToken('eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6IjBmOGMwNDAxZDAy');
创建订单
要创建订单,需要某些参数,许多参数根据订单的性质是可选的。例如,要请求一个价值10.00英镑的单个电子代码,以下示例是最基本的所需内容。在这种情况下,订单的大部分信息由Simfoni系统的配置预先确定。
订单处理受订购产品应用的一些规则控制。其中之一是控制产品在没有人工干预的情况下何时可以订购。如果账户没有足够的资金(无论是通过信用卡或借记卡服务,还是账户处于逾期债务状态),则不会处理订单。同样,产品可能受到限制,在没有人工干预的情况下何时可以订购(快速通道)。通常,这将设置为24小时7天处理。如果任何原因对产品有限制,将返回错误消息
$payload = [ 'urn' => 1234, 'items' => [ 'data' => [ [ 'sku' => 'ECODE_SKU', 'quantity' => 1, 'price' => 10.00, 'activation_date' => '2021-01-01T17:00:00+00:00', ], ] ] ]; \MBLSolutions\Simfoni\Simfoni::setToken('your-token'); $order = new \MBLSolutions\Simfoni\Order(); $response = $order->create($payload);
成功的请求将显示已放置订单的信息。
[ 'data' => [ 'id' => 6000001, 'invoice_number' => null, 'client_name' => 'An Client', 'account_name' => 'An Account', 'reference' => 'order-reference-here', 'po_number' => null, 'discount' => 0, 'handling' => 0, 'status' => 'Awaiting Payment', 'contact_company' => 'An Account', 'contact_title' => 'Ms', 'contact_first_name' => 'Dayton', 'contact_last_name' => 'Quitzon', 'contact_email' => 'bryon.tromp@example.net', 'contact_address1' => '843', 'contact_address2' => 'Freeway', 'contact_address3' => 'Apt. 979', 'contact_town_city' => 'Lake Faye', 'contact_county' => 'Idaho', 'contact_postcode' => '43270', 'contact_country' => 'GB', 'billing_company' => 'An Account', 'billing_title' => 'Ms', 'billing_first_name' => 'Dayton', 'billing_last_name' => 'Quitzon', 'billing_email' => 'bryon.tromp@example.net', 'billing_address1' => '843', 'billing_address2' => 'Freeway', 'billing_address3' => 'Apt. 979', 'billing_town_city' => 'Lake Faye', 'billing_county' => 'Idaho', 'billing_postcode' => '43270', 'billing_country' => 'GB', 'order_date' => '2021-01-01T15:00:00+00:00' ], ];
发行信息
要查看与订单关联的加密PAN、序列号、PIN和URL信息的详细信息,必须使用IssuedInfo
请求此信息。
为了调用此端点,必须设置Webhook以在订单完成后返回所需参数信息。
\MBLSolutions\Simfoni\Simfoni::setToken('your-token'); $issuedInfo = new \MBLSolutions\Simfoni\IssuedInfo(); $result = $issedInfo->show('your-hash');
一个示例成功响应
[ 'data' => [ [ 'item_id' => 'XqVroNPWnw', 'sku' => '12345678', 'value' => 100, 'masked_pan' => '************1350', 'encrypted_pan' => 'eyJpdiI6ImJuY2RIM3hrSnVcL3Q4amhET1BwSjZnPT0iLCJ2YWx1ZSI6ImRwWU42anNZNlFXZUJ0REVFSXJDTFFmNjVuZHFcL3ZNaXQ1Z3gzNUZ1OUt3PSIsIm1hYyI6IjVkMjM5ODlkYWM2ZjE5OWJiYjMzNWQyYTZkZDI1ZWJkZGUzMTVlZDFjOGM5NDM4YzllNWM5ZWExN2YxNDZhMjYifQ==', 'masked_serial' => '****4360', 'encrypted_serial' => 'eyJpdiI6IlwvVXpuQW9KVittem1rQnVQc0t3N2p3PT0iLCJ2YWx1ZSI6IlFKSGt6OXpHWWlnSFJ5WjFGWDAxaVE9PSIsIm1hYyI6ImRlNTEwMzUzZTZlZjUyNjdkZDBhZTFlYWFiOWNiYzIyNmZlNWJhMGFiYjgxYzI1NzgzMTIzMjFiYjYwOWYyMDQifQ==', 'pin' => 'eyJpdiI6IndXNldUdkRDeDZkVFFiSVErK25sM1E9PSIsInZhbHVlIjoidjJBUFVhUlMzaTFMREVTSEVTYTRQRTkydnlaN2tESmR4ZXVpd1hpMVZaWGdseVwvNnNFeEVZVyttZEMyRnZ1dVhXWElNM3p6dWhGYmNjTko0ZE12N3dYemFxTllMVU5SVU9EdHhaZGFad2xlUXFKXC9HWEpyTFVnUVNcL2wwQTAwT2RMWEdxUVM4ZklvdnJtNlNzY3ZYaHBuS0dzZkt5QlRoSWZHc2kyb0ppSkRiR0ttMVYrbXg3ZmYrRXBjS1ZkQVhacjV4clhjaVg1TlNxVkFmV2FZb3dKRTdIajVZRDQ1ck9vVFwvTkFZZXpOa1VSSW5pTE9lTVdXelVVTU5OR2h1MWNUK2JFMjZZT1lZQmZ1OEkrS1VINzNnPT0iLCJtYWMiOiJkNTNiOWE1NzFlZDI2MGM1Y2M1MjU3NTcxYzNmMjgxZmRlMjdmMDYwYzRmZDIyYzA2YmQzN2RkZTBkZGMxY2RmIn0=', 'url' => 'eyJpdiI6Imk0YndiZUZQUGxmN25JMWZQT21KVkE9PSIsInZhbHVlIjoiZW02eTFCem9wRmZsV3pxNUZsZkFqZWFHYWwyOEFhajNCXC9nSVFcL0lEUk9rWnIrbTM5NjBkK0lMV0paSlVzcVRUcG0xVXk0d0ZjYk9wWjlTTlUrQlRIa3QxbHhscWlJdDJ3VlhFUkladjl5eEo4Rnk2UlwvdmNcL21ZTmMzR3ZOc3RuNVYwU0YyUmVtdVA2T0YybDhWSHlydGx6TTZLY2hUUGdxOEhmTWw3NDZoMlJnQ01GRUFSZFdUVE41UEZOditzdWxrQ3NqaGlFOEZWS0d3ZjR0VGUrdTVXcHdHT1E4dzRjQ08xUVJUdWVoSUlNamhcL3ZOTUEwY29henh0S25ZU0MrTWcrNEFBWko1MjdFR1U1RHpvcUN2K01LSzArVjZNZmR0S29EQkM4NG4zNFIxbGhXNG1Ma25OeHZLSmk3aWtcL0siLCJtYWMiOiJiMmY1M2JhNTYyNmFhNzJhNmJmNGNkOWRkMDhlODY0ZDY2MjYzNjJjN2ZkODViM2E0MzRmNWUyYTY2MjQ2MzRiIn0=', 'activation_date' => '2018-12-25T00:00:00+00:00' ] ], 'links' => [ 'first' => 'https://simfoni.co.uk/api/order/eyJpdiI6Im9FN1pMZ2kwMlRlcXU1c1Z5cGxxNXc9PSIsInZhbHVlIjoiXC9SXC9xOFFSSklWa3lEWG82bDhsN293PT0iLCJtYWMiOiIxMDBmYmVjODlhYjE3MDcxNzc2ZDM2NmMxY2YwNThlNWFjN2E3ZDQ3MjBkMTE5NGQwYzE4MDZlNmI3YjkwZjdmIn0=/issuedinfo?page=1', 'last' => 'https://simfoni.co.uk/api/order/eyJpdiI6Im9FN1pMZ2kwMlRlcXU1c1Z5cGxxNXc9PSIsInZhbHVlIjoiXC9SXC9xOFFSSklWa3lEWG82bDhsN293PT0iLCJtYWMiOiIxMDBmYmVjODlhYjE3MDcxNzc2ZDM2NmMxY2YwNThlNWFjN2E3ZDQ3MjBkMTE5NGQwYzE4MDZlNmI3YjkwZjdmIn0=/issuedinfo?page=1', 'prev' => null, 'next' => null ], 'meta' => [ 'current_page' => 1, 'from' => 1, 'last_page' => 1, 'path' => 'https://simfoni.co.uk/api/order/eyJpdiI6Im9FN1pMZ2kwMlRlcXU1c1Z5cGxxNXc9PSIsInZhbHVlIjoiXC9SXC9xOFFSSklWa3lEWG82bDhsN293PT0iLCJtYWMiOiIxMDBmYmVjODlhYjE3MDcxNzc2ZDM2NmMxY2YwNThlNWFjN2E3ZDQ3MjBkMTE5NGQwYzE4MDZlNmI3YjkwZjdmIn0=/issuedinfo', 'per_page' => 20, 'to' => 1, 'total' => 1 ], ];
解密
当使用IssuedInfo
时,返回的数据包含与订单关联的加密PAN、序列号、PIN和URL信息。由于此信息是机密的,因此以加密形式返回。要解密值,需要一个密钥。
要解密值,需要一个密钥。这是专门用于解密此信息。此密钥将由Redu Retail作为配置的一部分提供。
// test decrypting a 4 digit pin $decrypt = new new \MBLSolutions\Simfoni\Decrypt('JD62JFgGrKJdc1UsZmHykg=='); $string = 'eyJpdiI6Ikhjdlp1Uzc0WFZ2MkdDZ3lHc3VVQnc9PSIsInZhbHVlIjoiXC8reHhBditLWUc3eDdiWlFhVm96enBXQlhJSUR6VzZZb3I4NE9MNkd6Tms9IiwibWFjIjoiYjFiNWRlYzI0NDY2ZmZmYTk4NGJhMjgxN2EwZTAyZjg0YzJmNjg5YmNiMDA2ZDQ1OWViODgxM2QwM2FiNjk3YSJ9'; $pin = $decrypt->data($string); // pin = 3840
响应
所有响应将以数组的形式返回。为了保持调用的一致性,即使响应只包含一个结果,或者没有任何结果,所有结果都将分页。
响应将包含三个顶级键
data
,它包含结果数组。links
,它包含用于分页的链接。meta
,它包含与分页相关的额外信息。
[ 'data' => [ // results ], 'links' => [ 'first' => 'https://simfoni.co.uk/api/order?page=1', 'next' => 'https://simfoni.co.uk/api/order?page=2', ], 'meta' => [ 'current_page' => 1, 'from' => 1, 'last_page' => 1, 'path' => 'https://simfoni.co.uk/api/order', 'per_page' => 20, 'to' => 1, 'total' => 1 ] ];
错误
异常
在从Simfoni获取数据时发生异常级别的错误,将返回一个包含单个message
索引的数组。
[ 'message' => 'A message describing the error', ];
验证失败
对于需要特定参数的方法,如果参数验证失败,您将收到以下响应体
[ 'message' => 'The given data was invalid.', 'errors' => [ // errors here ], ];
errors
键将包含一个对象,其中的键是验证失败的字段名称,值是描述验证失败的消息数组,以便您可以纠正您的输入。
字段名称使用“点”表示法来指定嵌套字段名称。例如,字段items[0][sku]在错误对象中将被表示为items.0.sku。
许可
Simfoni的PHP接口是免费软件,根据MIT许可条款分发。
要使用此软件包,需要与Simfoni签订合同/订阅,如需更多信息,请联系Redu Group 技术部门