mblsolutions / simfoni-php-laravel
Laravel PHP应用程序的官方Simfoni接口。
Requires
- ext-json: *
- illuminate/events: ~5.6.0|~5.7.0|~5.8.0|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
- illuminate/pagination: ~5.6.0|~5.7.0|~5.8.0|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
- illuminate/routing: ~5.6.0|~5.7.0|~5.8.0|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
- illuminate/session: ~5.6.0|~5.7.0|~5.8.0|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
- illuminate/support: ~5.6.0|~5.7.0|~5.8.0|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
- mblsolutions/simfoni-php: ^3.0
Requires (Dev)
- orchestra/testbench: ^8.0
- phpunit/phpunit: ^8.0|^9.3
This package is auto-updated.
Last update: 2024-09-17 13:37:23 UTC
README
Simfoni Laravel接口为PHP应用程序提供对Simfoni平台的API接口。
内容
安装
安装Simfoni PHP Laravel的推荐方式是通过Composer。
composer require mblsolutions/simfoni-php-laravel
没有自动发现功能的Laravel
如果您不使用自动发现功能,请将ServiceProvider添加到config/app.php中的providers数组中
\MBLSolutions\SimfoniLaravel\SimfoniServiceProvider::class,
如果您想使用认证的facade,请将以下内容添加到app.php中的facades
'SimfoniAuth' => \MBLSolutions\SinfoniLaravel\SimAuthFacade::class,
配置
要将默认的Simfoni配置文件导入到Laravel中,请运行以下命令
php artisan vendor:publish --prodivder="MBLSolutions\SimfoniLaravel\SimfoniServiceProvider"
将在config/simfoni.php中生成一个新的配置文件 - 请确保使用Redu Retail提供的详细信息更新这些配置项。
身份验证
请注意:您的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'秒内过期)。
通过在Simfoni配置中设置令牌来使用access_token
。PHP库将自动将此令牌附加到每个API请求(在当前请求中,每个PHP请求都需要重新设置此令牌)。
\MBLSolutions\Simfoni\Simfoni::setToken('eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6IjBmOGMwNDAxZDAy');
创建订单
要创建订单,需要某些参数,许多参数根据订单的性质是可选的。例如,请求价值为10.00英镑的单个电子码,以下示例将是所需的最小内容。在这种情况下,许多订单信息是由Simfoni系统的配置预先确定的。
订单处理受订购产品的某些规则约束。其中之一是控制何时可以手动干预支付来订购产品。如果没有足够的资金可用(通过信用或借记服务)或者账户处于逾期债务状态,则不会处理订单。类似地,产品可能受到在无需手动干预的情况下订购的限制(快速通道)。通常,这将设置为24 X 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]将表示为errors对象中的items.0.sku。
许可证
Simfoni的PHP接口是免费软件,在MIT许可条款下分发。
要使用此软件包,需要与Simfoni签订合同/订阅,如需更多信息,请联系Redu集团技术部门