Apple Pay中最小的授权

Apple Pay中最小的授权


需要特别注意-买家通过TouchID或FaceID之后,这是从Apple获得的密码。 后端语言将是PHP。


我的名字叫Alexander,我是Moguta的一名初级PHP程序员,在我的途中,我不得不面对将Apple Pay集成到Moguta.CMS中的问题。 今天,我将告诉您如何通过Apple Pay授权自己付款,而不必研究安全连接和证书的问题,因为在旅途的开始我就没有这种材料。


引言


在这里,我将不介绍将Apple Pay引入我的网站的整个过程。 在RuNet上已完成有关如何注册Apple开发者帐户,在何处制作付款处理证书,在何处发送收到的答案的说明,只需询问Google“该网站上的Apple Pay集成”,然后选择所需的付款汇总器,即可详细说明所有必要步骤。行动。


简短评论


此说明的最低要求是MacOS可以使用密钥,因为在其他OS上使用证书是单独的材料,在此我将不再关注。


首先让我们找出敌对行动的地点。 算法如下:


  1. 用户通过在线商店中的Apple Pay开始付款过程;
  2. 在线商店将付款信息发送给Apple;
  3. 苹果回应给卖家数据的链接;
  4. 在线商店通过双向TLS通过链接发送卖家数据;
  5. 苹果发送包含PaymentData的数据;
  6. 在线商店将PaymentData重定向到支付网关并处理响应;

我们对第四点感兴趣,因为通常的cURL请求还不够。


我们得到证书


为了使Apple相信它与我们进行个人交易,您首先需要获得一个商家识别证书(不要与Payment Processing混淆,这是付款网关所必需的)。 首先,我们将根据官方说明制定证书申请。 生成的文件将附加到您的商家ID的Apple Pay商家身份证书中。


创建证书


作为响应,我们获得了merchant_id.cer,并将其添加到该束中。 根据其私钥,我们生成一个.p12文件。 为此,请调用私钥的上下文菜单,然后选择“导出...”。


导出到p12


我们使用以下命令拉出密钥(终端将要求的密码将是密钥的密码,连接到Apple时将需要它)


openssl pkcs12 -in <  >.p12 -out ApplePay.key.pem -nocerts -nodes 

并在pem中超过了我们的证书


  openssl x509 -inform der -in merchant_id.cer -out merchant_id.pem 

现在,我们拥有了所有必需的文件,可以用来向Apple服务器证明自己是我们声称的身份。


发送请求


我们忽略了接收到验证链接的时间(请参阅有关Habr的另一篇文章中的更多内容 ),而当Safari中JS上的脚本向我们的服务器发送苹果中的授权请求时,我们就忽略了这一时刻。


为此,我们将PHP与cURL一起使用。 代码示例:


 $ch = curl_init(); $data = '{"merchantIdentifier":"<,      Merchan ID>", "domainName":"< ->", "displayName":"< -,       TouchID/FaceID>"}'; curl_setopt($ch, CURLOPT_URL, '<  Apple,   validationURL>'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt($ch, CURLOPT_CERTINFO, true); curl_setopt($ch, CURLOPT_VERBOSE, true); curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2); curl_setopt($ch, CURLOPT_SSLCERT, '<  >.pem'); curl_setopt($ch, CURLOPT_SSLKEY, '<  >.pem'>); curl_setopt($ch, CURLOPT_SSLKEYPASSWD, '<  >'); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json")); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $res = curl_exec($ch); curl_close($ch); echo json_encode($res); 

我们从收到的响应中提取paymentData,并将其发送到我们的付款网关。 恭喜,授权已通过,您可以划钱。


注意事项


命运很久没有让我为建立的连接感到高兴,Apple给了我以下答案:


 Payment Services Exception merchantId=< > unauthorized to service on behalf of merchantId=<  > reason=\"The latter is not registered for Apple Pay on the web\"" 

正如我们希望的那样,该消息的文字不够明显。 同样,网络上的信息也没有。 事实证明,这很可能意味着您只是在商人标识符字段中输入了错误的值。


总结


我很高兴听到评论中的建议,技巧或批评。


我希望这篇文章能像我一样使同样失去的灵魂受益。

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


All Articles