切换到新的Yandex。Cashier API的八个原因

2017年10月,Yandex.Kassa拥有新的支付协议和API的第三版。 我们已经讨论过如何以及为什么要这样做,现在我们回想起那些尚未这样做的关键原因。

1.连接付款变得非常快


在新的API上,它发生的速度比以前快了5到10倍,现在,普通开发人员可以在一个工作日内(而不是像以前那样)在5个工作日内将付款连接到他的网站(或完全不正常)。 当然,这是在所有事情都达成一致,批准了申请并收到了访问密钥之后的那部分工作。 但是一天也足够了。

对于在社交网络上销售商品的人,可以通过邮件,SMS或仅可以以私人消息形式发送的链接来开发票。

2.节省开发人员和管理员的力量


要维护旧版本,您需要注意各种小问题-分配一个静态IP地址以使用该API,并每年更改一次证书。 而且在旧版本中,不支持HTTPS SNI模式,许多托管服务提供商的“使用HTTPS托管”服务现在免费(或几乎免费)提供了该功能。

对于退款,确认,取消或重试卡支付,使用协议MWS(Merchant Web Services)。 在MWS的帮助下,商店可以退款确认取消延期付款,以及通过信用卡重复付款 (如果付款人同意)。 在用于MWS的API的旧版本中,商店需要从Yandex.Money认证中心接收X.509证书,商店使用该证书向Yandex.Cash生成请求。 现在,所有这些都是现成的-您只需获取访问密钥并实施必要的付款方式即可。

通常,集成过程中消失了许多不必要的事情,我们不得不自己处理这些问题,并花一些时间为开发人员和管理员使用。

3.仅REST,仅此而已


我们以REST风格重写了所有内容-现在该协议已明确构建且可预测。 由于过去的困难,几乎所有的付款方式都有自己的语法,脚本和流程 ,在安装,配置和付款时我们必须经历这些语法,脚本和流程 。 这项新协议摆脱了“儿童疾病”,并符合国际支付领导者制定的标准。

为了进行比较,让我们看一下旧的的退款方式。

以前,有必要形成一个订单文档以执行根据XML 1.0标准的操作,以创建具有数字签名但没有认证,数据压缩和加密链的PKCS#7格式的密码包。 之后,通过HTTP / 1.1使用加密程序包的主体或通过应用程序/ pkcs-mime MIME类型在附件中生成了POST请求。 然后是小型企业-传递八个输入参数,原则上一切准备就绪。

HTTP请求总数:
POST /webservice/mws/api/returnPayment HTTP/1.1 Content-Type: application/pkcs7-mime Content-Length: 906 ——-BEGIN PKCS7——- MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAaCA JIAEgbE8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KPG1h a2VEZXBvc2l0aW9uUmVzcG9uc2UgY2xpZW50T3JkZXJJZD0iMTI5MTExNjIzNDUy OCIgc3RhdHVzPSIwIi6789Jvcj0iMCIgcHJvY2Vzc2VkRFQ9IjIwMTAtMTEtMzBU MTE6MjM6NTQuNjI0WiIgYmFsYW5jZT0iNTQxNDYuNzMiIC8+DQoAAAAAAAAxggF8 MIIBeAIBATB3MGoxCzAJBgNVBAYTAlJVMQ8wDQYDVQQIEwZSdXNzaWExFjAUBgNV BAcTDVN0LlBldGVyc2J1cmcxITAfBgNVBAoTGEludGVybmV0IFdpZGdpdHMgUHR5 IEx0ZDEPMA0GA1UEAxMGc2VydmVyAgkAy2xbdQckXjIwCQYFKw4DAhoFAKBdMBgG CSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTEwMTEzMDEx MjM1NVowIwYJKoZIhvcNAQkEMRYEFEYNh8glwqIXGR/n6oYrApa8DaO5MA0GCSqG SIb3DQEBAQUABIGAHlgGsYK30RXWBvuQao0V73KIPQE1A6BCg7Y6Iag/xlmZ3rBB kFpszF/O2fB+t84pCHfV15ErZQEkAqIotkEYEgA3hAddEW5+RWUzp+3npHpW5OY7 h3niP5Pj+r0P8EDgHe2j0Zb3dzj2mbwOshZD+FP1IcR8AmiTV3u35C6KAEsAAAAA AAA= ——-END PKCS7——- 


以及退款要求本身:
 <returnPaymentRequest clientOrderId="46890" requestDT="2011-07-02T20:38:00.000Z" invoiceId="2000000433" shopId="6689" amount="10.00" currency="643" cause="   " /> 

在新版本的API中,Python中的退款如下所示:
 refund = Refund.create({   "amount": {       "value": "2.00",       "currency": "RUB"   },   "payment_id": "21741269-000d-50be-b000-0486ffbf45b0" }) 

将返回一个清晰的JSON,可以在最短的时间内解析任何内容:
 {   "id": "216742f7-0016-50be-b000-078a43a63ae4",   "status": "succeeded",   "amount": {     "value": "2.00",     "currency": "RUB"   },   "created_at": "2017-10-04T19:27:51.407Z",   "payment_id": "21746789-000f-50be-b000-0486ffbf45b0" } 

美人

4.支持不同的语言和技术


新的API还具有用于移动设备SDK ,PHP,Python和Node.js。 无论您的后端人员做什么(好,极个别情况除外),通过收银台进行的付款都会很快建立联系。 如果一个人积极地用Python编写了几个月以上,他将应对这种集成。

去年,我们发布了一个适用于iOS和Android上的移动应用程序的库。 在它的帮助下,付款表单已嵌入到应用程序中,看起来像它的一部分(没有WebView)。 用户将能够通过Yandex.Money钱包,Google Pay,Apple Pay或Sberbank Online用信用卡付款。

它也很容易实现-向您的开发人员提供指导,您很快就会发现它变得多么美妙。 我们已经在中心博客中详细介绍了移动SDK如何为您和您的移动应用程序的用户增加幸福感。

5.定期付款,无需萨满教


安装和配置完成后,带有预授权资金的卡付款将立即产生-默认情况下,它们会内置到API中。
有经常性付款(既有卡又有钱包):您需要与安全服务进行协调,但是在旧协议中也是如此。 如果定期付款使用带有强制性3D-Secure的卡,则新API将首先返回指向其的链接。
总的来说,一切都变得更加简单-在这里,您也不需要使用MWS进行长时间的仪式,获取证书和所有其他加密货币。

6.自动通知付款状态更改


以前,您必须手动检查每笔付款的状态,现在,如果已更改,开发人员将自动收到通知。
API v3内置了四种类型的付款状态自动通知:
  1. “付款后等待商家确认”,
  2. “付费”
  3. “付款期间取消或发生错误”,
  4. “付款已退回。”

在旧协议上,我们必须编写一个复杂的MWS方法listOrders,其中显示了订单的列表和属性。 12个参数,发送请求的复杂逻辑以及以CSV格式接收响应的有趣机会:

 status=0;error=0;processedDT=2011-08-02T14:46:58.096+03:00;orderCount=2 shopId;shopName;articleId;articleName;invoiceId;orderNumber;paymentSystemOrderNumber;customerNumber;createdDatetime;paid;orderSumAmount; orderSumCurrencyPaycash;orderSumBankPaycash;paidSumAmount;paidSumCurrencyPaycash;paidSumBankPaycash;receivedSumAmount;receivedSumCurrencyPaycash; receivedSumBankPaycash;shopSumAmount;shopSumCurrencyPaycash;shopSumBankPaycash;paymentDatetime;paymentAuthorizationTime;payerCode;payerAddress;payeeCode; paymentSystemDatetime;avisoReceivedDatetime;avisoStatus;paymentType;agentId;uniLabel;environment 1;" ";2;"-";2000024717776;"2011.08.02 09:07:32";483512879684006008;97881;2011-08-02T08:07:59.148+03:00;true;10.15;643;1003;10.15;643; 1003;10.15;643;1003;10.15;643;1003;2011-08-02T08:07:59.684+03:00;483512879684006008;41003476047679;192.168.1.127;41003131475668;2011-08-02T08:07:59.684+03:00; 2011-08-02T08:07:59.660+03:00;1000;AC;200002;1cd12967-0001-5000-8000-000000034fd8;Live 1;" ";2;"-";2000024717780;2000024717780;483512937773006008;770367;2011-08-02T08:08:57.175+03:00;true;10.00;643;1003;10.00;643; 1003;10.00;643;1003;10.00;643;1003;2011-08-02T08:08:57.773+03:00;483512937773006008;41003494819180;192.168.1.127;41003131475668;2011-08-02T08:08:57.773+03:00; 2011-08-02T08:08:57.730+03:00;1000;AC;200002;1cd129a4-0001-5000-8000-000000034fe1;Live 

在新版本中是这样。 要求:
 curl https://payment.yandex.net/api/v3/payments/{payment_id} \ -u < >:< > : { "id": "22312f66-000f-5100-8000-18db351245c7", "status": "waiting_for_capture", "paid": true, "amount": {   "value": "2.00",   "currency": "RUB" }, "created_at": "2018-07-18T10:51:18.139Z", "description": " №72", "expires_at": "2018-07-25T10:52:00.233Z", "metadata": {}, "payment_method": {   "type": "bank_card",   "id": "22ebbf66-000f-5000-8000-18db351245c7",   "saved": false,   "card": {     "first6": "555555",     "last4": "4444",     "card_type": "MasterCard"   },   "title": "Bank card *4444" }, "test": false } 

7.立即清楚发生错误的时间


如果付款失败,那么新的API不会“出事”,而是会清楚说明发生原因的原因-例如,卡用完了钱或用户想通过Sberbank Online付款,但未连接。
有时可能会出现短期的“出问题”-我们当然会与他们抗争(主编Natasha向我点头并表示我的拇指),但有时会预测不同库之间的错误映射差异或意外的软件行为不可能的。 甚至对我们来说。
通常,如果取消付款,则来自API的响应将立即清晰可见,原因如下:
 { "id": "22379b7b-000f-5000-9030-1a603a795739", "status": "canceled", "paid": false, "amount": {   "value": "2.00",   "currency": "RUB" }, "created_at": "2018-05-23T15:24:43.812Z", "metadata": {}, "payment_method": {   "type": "bank_card",   "id": "22977a7b-000f-5000-9000-1a603a795129",   "saved": false }, "recipient": {   "account_id": "100001",   "gateway_id": "1000001" }, "test": false, "cancellation_details": {   "party": "payment_network",   "reason": "payment_method_restricted" } } 

8.在开始之前可以检查所有内容


要获取测试密钥并查看一切工作原理,您需要在Yandex.Cash帐户中注册-为此,您需要在Yandex和TIN公司上的用户名。 在问卷中,选择自我注册-一分钟后,将创建一个测试电路,您可以检查付款方式。

在启动此功能之前,可以使用一个测试环境 ,在该环境中,您可以使用Insomnia REST客户端尝试API v3。 有一些使用信用卡付款的示例,这些示例清楚地显示了发送了什么请求,返回了什么响应以及在数据交换过程的所有阶段发生了什么。



对于集成和维护的所有阶段,我们都有俄语英语的循序渐进指南以及更详细的API参考

通常,如果尚未使用新的API,请切换到新的API,或者连接到Yandex.Checkout-一切准备就绪,可以在此访问。

Source: https://habr.com/ru/post/zh-CN453174/


All Articles