Yandex.Money APIを䜿甚するためのPHPラむブラリ

Yandex.Money API 私は長い間新しいものを詊しおみたいず思っおいたしたが、仕事でYandex.Money APIを異なる蚀語で䜿甚する䟋を曞くこずを提案したずき、私はこのチャレンゞオファヌを喜んで受け入れたした。 ほずんどの堎合、このような機胜はさたざたなホスティングサむトのアプリケヌションで䜿甚されるため、最初にPHPで蚘述しようずする匷い意思が決定されたした。 さらに、その前のAPIも芋たこずがありたせん。 さらに、倧孊の研究宀を陀き、PHPの経隓はありたせんでした。 この事件は興味深いず玄束された。



環境の遞択



私が最初に出䌚ったのは、ホスティングにすぐに開発しおデプロむするこずはあたり䟿利ではないずいうこずです。 そしお、りェブ開発者向けに玳士甚キットをダりンロヌドするこずにしたした。 孊生時代から、デンワヌずいう名前が蚘憶に浮かびたした。 詊したしたが、すぐに拒吊したした。 圌は自分の人生を生きおおり、Apache confファむル内の䜕かを曞き換えお蚭定しようずしたずき、圌は自分の裁量でそれを消去したか消去したせんでした。 ぀たり、私はそれを蚭定しなかったが、圌が私をしたこずが刀明した。 「私が銬を持っおいたら-それは数字になるだろう...」ず思い出した。 その結果、私はもちろん圌を打ち負かしたしたが、より単玔なWAMPサヌバヌを芋぀けるこずにしたした。 Denwerは良い補品であり、それに反察するものは䜕もありたせんが、ファックスやマニュアルを読みたくありたせんでした。



Wiki で WAMPのリストを含むペヌゞを芋぀け、それらを敎理し始めたした。 遞択の䞻な基準はプロゞェクトのサポヌト性であり、そのためビルドバヌゞョンは倚かれ少なかれ新鮮であり、むンストヌル/起動が容易でした。 その結果、 The Uniform Serverを安党に掚奚できたす 。 むンストヌルは䞍芁ですアヌカむブを解凍するだけです。起動時にトレむにハングし、=を軜く抌すず起動したす。 圌は裁定をしなかったので、私は圌に決着を぀けたした。



OAuth認蚌



私は指瀺を読み、 ドキュメントをダりンロヌドし、サヌベルを暎露し、戊闘に突入したした。 しかし、戊いでは、OAuth認蚌にすぐに負けおしたいたした。 OAuthは、ナヌザヌ名ずパスワヌドをアプリケヌションに入力および保存せずに、ナヌザヌのサヌビス/アカりントにアクセスする方法です。 これはTwitterの䜜成者から届いたもので、次のようなものです。サヌビスこの堎合はYandex.Moneyにリク゚ストを行い、ナヌザヌはYandex.Moneyサヌバヌでナヌザヌ名/パスワヌドを入力し、アプリケヌションにアカりントを䜿甚する蚱可を䞎えたす。 その埌、Yandex.Moneyサヌバヌはアプリケヌションにリダむレクトし、存続期間が非垞に短い䞀時コヌドを取埗したす。 次に、Yandex.Moneyぞの別の芁求を通じお、このタむムコヌドをナヌザヌの定数トヌクンに倉曎し、動員解陀ずしお、すべおの道路が開いおいたす。



しかし、OAuth認蚌を行っおいる間に、セキュリティの問題に遭遇したした。 Yandex.Moneyサヌバヌにアクセスしようずしたしたが、PHPは汚いこずを誓い始め、蚌明曞に぀いお䜕か蚀いたした。 むンタヌネットを少し調べおみるず、アプリケヌションがサヌバヌのSSL蚌明曞を確認する必芁があるこずに気付きたした。 ナヌザヌの安党を確保するためにうたくやろうず思ったので、怜玢を続けたした。 しかし、RuNetでのサヌバヌ蚌明曞怜蚌の実装の健党な䟋はほずんどありたせん。 順番に説明したす。



最初に、リク゚ストを送信するずきにコヌドで蚌明曞怜蚌を登録する必芁がありたした。 蚌明曞怜蚌芁求の送信に䜿甚するcURLを匷制するにはどうすればよいですか 私は怜玢を開始し、蚌明曞゚ラヌに関する最も䞀般的なアドバむスであるDISABLE Verificationに驚きたした。 そしお、これは倚くのサむトやフォヌラムで提䟛されおいたすたずえば、 こちら 。 ホラヌ党般。 最も頻繁に提䟛されるコヌドは次のずおりです。



curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);







それを芚えお、子䟛たち、そしお決しお曞かないでください。 「そしお今、息子、私たちはあなたが忘れなければならない悪い蚀葉をすべお繰り返すでしょう。」 英語を話すむンタヌネット䞊ですべおがそれほど悪いわけではないこずを神に感謝し、すべおを説明するリンクを芋぀けたした。 圌はそこに曞かれおいる通りにやりたした、そしおそれは働きたした。



次に、Yandex.Moneyの公開蚌明曞を自宅に保管する必芁があったため、芁求を送信するずきに比范するものがありたした。 私は完党に遅れおいるわけではありたせんが、それでも私にはかなり難しいように思えたした。 SSLを䜿甚する際に将来圹立぀かもしれたせん。 https経由で目的のサむトにアクセスし、蚌明曞を確認しお゚クスポヌトしたす。 しかし、それらは3぀あり、どれが必芁ですか 「棚からパむを取りたす。 それらの2぀がありたす、真ん䞭のものを取りたす。」 蚌明機関ルヌトおよび䞭間Yandexの蚌明曞を゚クスポヌトする必芁があるこずがわかりたした。 最終蚌明曞は幎に1回倉曎されたす。チェヌンに入力し、問題が発生したずきに倉曎を忘れるず、アプリケヌションのすべおが砎損したす。 したがっお、指定された2぀の蚌明曞のみを゚クスポヌトし、1぀のテキストファむルに保存するだけです スクリヌンショット 。 私のラむブラリでは、圌はym.crtずしお衚瀺されたす 。



その埌、リク゚ストは私を獲埗したした。 やった さらに技術の問題でした。 ドキュメントではすべおが明確でした。 実際、それが実際にコヌドドキュメントにコピヌした理由です。 たた、オブゞェクトずしお䜜成した予玄を䜜成したす。 私の意芋では、オブゞェクトを扱うのは䟿利で䟿利です。



暗号化



暗号化にはただ小さな問題がありたした。 最初に、ナヌザヌトヌクンの保存/埩元は、暙準のMcrypt PHPラむブラリによっお実装されたした。 しかし、結局のずころ、圌女には問題がありたす。 たずえば、マニュアルに蚘茉されおいる䟋から、廃止された関数はただちに機胜したした。 他の関数は、それらを機胜させたいずいう私の欲求に満ちおおり、倱敗したモゞュヌルの初期化に぀いおのみ述べたした。 理解する必芁がありたした。 それから、ホストはこのラむブラリをあたり奜きではないこずが刀明したした。 PHP 5.3でサむトを䜜成するずきにMcryptモゞュヌルがない理由をホスティング業者のサポヌトに尋ねたした。 圌らは私に逐語的に答えたした「圌は5.2で長幎バグがありたした-モゞュヌルずしお5.3に自動的に远加したせんでした。5幎ごずに蚘憶されたすが、問題がありたした。」 PHPに察称暗号化を実装した他の䟿利な暙準ラむブラリは芋぀かりたせんでしたOpenSSLラむブラリがありたすが、これにはたったく適しおいたせん。 その埌、暗号化ラむブラリをphpseclibに倉曎するこずにしたした 。これはオヌプンで、䞀般的なAESアルゎリズムをサポヌトしおいたす。 圌女はすぐに問題なく皌いだ。



機胜ず䜿甚䟋



たた、「猫のトレヌニング」、たたはむしろテストずデバッグのために、ラむブラリ関数の呌び出しが行われたした。その埌、芋栄えの良いレむアりトのためにレむアりトを䜿甚し、コメントで満たされ、ラむブラリの䜿甚䟋を呌び出したした。



その結果、次のYandex.Money API関数の呌び出しが実装されたしたアカりント情報、取匕履歎、操䜜の詳现情報、他のナヌザヌぞの送金。 長所ず機胜



ラむブラリ自䜓は、 ym.crt蚌明曞チェヌンファむルず、 次を含むym.phpファむルです。

このラむブラリには、暗号化を実装する2぀のファむルRijndael.phpずAES.phpが付属しおいたす。 これらのファむルは、 phpseclibラむブラリから取埗されたす。 トヌクンを保存および埩元する方法を䜿甚する堎合に必芁です。

泚PHPバヌゞョン5ず、httpリク゚スト甚のcUrl暙準ラむブラリを䜿甚したす。



詳现な䟋をむンストヌルしお芋おいない人のために、いく぀かの課題を瀺したす。

APIを介しおアカりントで操䜜を実行するには、ナヌザヌの蚱可、぀たりトヌクンを取埗する必芁がありたす。 次の呌び出しで受信できたすたずえば、アカりント情報や取匕履歎を衚瀺するアクセス暩がありたす。



  YandexMoney :: authorizeConsts :: CLIENT_ID、 'account-info operation-history'、Consts :: REDIRECT_URL;

 //次に、リダむレクトペヌゞでオブゞェクトの䜜成ずトヌクンの取埗を開始したす
 $ ym = new YandexMoney定数:: CLIENT_ID、定数:: CERTIFICATE_CHAIN_PATH;	
 $ token = $ ym-> receiveOAuthToken$ _ GET ['code']、Consts :: REDIRECT_URL; 


オブゞェクト$ ymを䜜成するず、アプリケヌション識別子ず蚌明曞チェヌンぞのサヌバヌ䞊の絶察パスファむルym.crtが枡されたす。 それず、別のモゞュヌルは通垞、任意のモゞュヌルの定数この䟋ではconsts.phpに登録されたす。

それでは、ナヌザヌのアカりントに関する情報を取埗する方法を瀺したしょう。 同様に、オブゞェクトを䜜成しおからメ゜ッドを呌び出し、ナヌザヌトヌクンを枡したす。



  $ ym = new YandexMoney定数:: CLIENT_ID、定数:: CERTIFICATE_CHAIN_PATH;
 $ accountInfoResponse = $ ym-> accountInfo$トヌクン;			

 echo 'アカりント番号'。  $ accountInfoResponse-> getAccount。  「\ n」;
 echo 'Balance'。  $ accountInfoResponse-> getBalance。  「\ n」;
 echo '通貚コヌド'。  $ accountInfoResponse-> getCurrency。  「\ n」; 


受信したアカりント情報。



状況は他の課題ず䌌おいたす。



その結果、圌らはこのラむブラリをビッグネヌムSDKず呌び、それをGitHubに眮くこずにしたした。

ご意芋やご提案をお埅ちしおおりたす。たた、フォヌクやプルリク゚ストもご芧いただけたす。



All Articles