
需要特别注意-买家通过TouchID或FaceID之后,这是从Apple获得的密码。 后端语言将是PHP。
我的名字叫Alexander,我是Moguta的一名初级PHP程序员,在我的途中,我不得不面对将Apple Pay集成到Moguta.CMS中的问题。 今天,我将告诉您如何通过Apple Pay授权自己付款,而不必研究安全连接和证书的问题,因为在旅途的开始我就没有这种材料。
引言
在这里,我将不介绍将Apple Pay引入我的网站的整个过程。 在RuNet上已完成有关如何注册Apple开发者帐户,在何处制作付款处理证书,在何处发送收到的答案的说明,只需询问Google“该网站上的Apple Pay集成”,然后选择所需的付款汇总器,即可详细说明所有必要步骤。行动。
简短评论
此说明的最低要求是MacOS可以使用密钥,因为在其他OS上使用证书是单独的材料,在此我将不再关注。
首先让我们找出敌对行动的地点。 算法如下:
- 用户通过在线商店中的Apple Pay开始付款过程;
- 在线商店将付款信息发送给Apple;
- 苹果回应给卖家数据的链接;
- 在线商店通过双向TLS通过链接发送卖家数据;
- 苹果发送包含PaymentData的数据;
- 在线商店将PaymentData重定向到支付网关并处理响应;
我们对第四点感兴趣,因为通常的cURL请求还不够。
我们得到证书
为了使Apple相信它与我们进行个人交易,您首先需要获得一个商家识别证书(不要与Payment Processing混淆,这是付款网关所必需的)。 首先,我们将根据官方说明制定证书申请。 生成的文件将附加到您的商家ID的Apple Pay商家身份证书中。

作为响应,我们获得了merchant_id.cer,并将其添加到该束中。 根据其私钥,我们生成一个.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\""
正如我们希望的那样,该消息的文字不够明显。 同样,网络上的信息也没有。 事实证明,这很可能意味着您只是在商人标识符字段中输入了错误的值。
总结
我很高兴听到评论中的建议,技巧或批评。
我希望这篇文章能像我一样使同样失去的灵魂受益。