Yandex.Money APIでお金を稼ぐ方法







あなたから-ストリーミングの収益化とYandex.Money APIでの実装のアイデア、私たちから-視聴者、広告、お金。







API移転の6歳の誕生日をアンチハカソンで祝うことにしました。誰でもジャックポットと戦うことができます。 100,000ルーブルの賞金に加えて、Yandex.Moneyを介した送金からの利益を勝者と共有します。







私たちは、すべての個々の開発者、起業家、スタートアップチームをカットします。







参加方法: Webでストリーミングするためのお金を集めるための、すぐに使用できるソリューションを開発する必要があります。







なぜこれが必要なのか:有料コンテンツのストリーミングを伴うサービス数は着実に増えていますが、彼らのためにお金を受け取る便利な方法はまだありません。 サービスの所有者だけでなく、ユーザーにとっても便利な少なくとも1つ。







創造性の自由度: Yandex.Money APIを介した支払いがソリューションに関与する必要があります。その他はすべてあなたの裁量に任されています。 会社の専門家のju審員が最適なソリューションを選択し、その作成者は賞金100,000ルーブルを受け取り、サービスの各オペレーションから0.5%の手数料を受け取ることができます。







要約すると 、2017年8月1日までに既製のプロトタイプとプロファイルを受け入れます。







APIを使用すると、次のタスクを実行できます。









問題の解決に没頭しやすくするために、例を使用してAPIを使用する一般的なシナリオを分析します。







#1ウォレットトランザクションへのアクセスをリクエストする



Yandex.Moneyでウォレットを使用して操作を行う前に(たとえば、取引の履歴やアカウントステータスを表示する)、開発者は特定の権限を取得する必要があります。







ところで、Yandex.Moneyでのアプリケーションの承認は、次の仕様を満たしています。



アプリケーションを登録し、そのパラメーターを指定します。 リダイレクトURIとして、OAuth認証が成功した後にYandex.Moneyがユーザーに送信するアドレスを指定します。 その後、一意のclient_id識別子を取得します。







これで、ユーザーウォレットで必要なアクションを実行する権利をリクエストできます。 ウォレットの取引履歴を表示する権限を持つ承認リクエストの例:







POST /oauth/authorize HTTP/1.1 Host: money.yandex.ru Content-Type: application/x-www-form-urlencoded Content-Length: 191 client_id=ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ01&response_type=code&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb&scope=account%2Dinfo%20operation%2Dhistory
      
      





認証リクエストがあった場合、ユーザーは認証ページにリダイレクトされ、そこでログインパスワードを入力し、リクエストされた権限のリストを確認または拒否できます。







画像の代替テキスト

許可インターフェース。







認証結果はHTTP 302リダイレクトとして返されます -アプリケーションは、開発者がリクエストパラメータで指定したリダイレクトURIアドレスにユーザーをリダイレクトします。 リダイレクトURIの値は、アプリケーションの設定と一致する必要があります。これにより、行の末尾に追加のパラメーターを追加できます。 認証結果が成功したリダイレクトアドレスには、パラメータコード (一時認証トークン)が含まれています。







 HTTP/1.1 302 Found Location: https://client.example.com/cb?code=i1WsRn1uB1ehfbb37
      
      





最後のステップは、特定の権利セットが割り当てられているトークンを取得することです。 その後、アプリケーションは一時トークンを認証トークンに変更し、開発者はそれを使用してウォレット内の情報にアクセスします。







 POST /oauth/token HTTP/1.1 Host: money.yandex.ru Content-Type: application/x-www-form-urlencoded Content-Length: 421 code=0DF3343A8D9C7B005B1952D9B933DC56ACB7FED6D3F2590A6FD90EC6391050EDFFCC993D325B41B00F58E5383F37F6831E8F415696E1CF07676EE8D0A3655CDD7C667189DFB69BFDB7116C0329303AB2554290048BAF9B767B4C335BF0E85830AC017AD2F14D97F529893C202D3B2C27A61EE53DC4FB04DAE8E815DE2E3F865F&client_id=ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ01&grant_type=authorization_code&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb
      
      





しかし、そのような答えは、一時的なトークンの交換が成功することで得られます。







 HTTP/1.1 200 OK Content-Type: application/json Content-Length: 293 Cache-Control: no-store { "access_token":"410012345678901.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123" }
      
      





Access_tokenは対称秘密であるため、アプリケーション開発者はそれを保護するために追加の対策を講じる必要があります。トークンを暗号化形式で保存し、所有者が認証に成功した場合にのみアクセスを提供します。







#2トランザクション履歴を表示する



トークンを受け取ると、開発者はトークンを使用して、ウォレットでの許可されたアクションに使用できます。 特に、この承認により、ユーザーのウォレットの履歴を表示できるようになったことを思い出してください。







ソーシャルネットワークのクラウドファンディングの分野からの最も単純な例:サッカーに特化した特定のVKontakteコミュニティ-多くの加入者と活動がありますが、これは余暇に作られたプロジェクトであり、人生の目標ではありません。 かつて、一般の人々が加入者の会議を開き、管理者の電子財布を通じて、このニーズやその他のニーズのためにお金を集めました。 受け取ったお金の分配の透明性を高めるために、管理者はテーブルを作成し、APIを介して操作の履歴に関するデータをそこに取り込みました。 誰かがウォレットに送金すると、誰もが操作の詳細、送信者、送金の目的を見ることができます。

データを表示するには、 操作履歴メソッドを使用します。これにより、開発者のリクエストをパーソナライズできます。 出力では、たとえば、最近の10件のトランザクション、過去6か月間の操作、または経費トランザクションのみを取得します。 それはすべて、開発者がサービスを作成するユーザーの食欲に依存します。







ストリーマーの場合、量、ニックネーム、送信者からのメッセージ、使用された支払い方法など、着信補充の日時に関する情報を表示すると便利です。 ほとんどの場合、データはニックネームでフィルタリングされます。これは、ストリーマーに役立つ場合があります。たとえば、最高の寄付者(サブスクライバー)を選択し、近い将来配信されるゲームを選択するよう勧めることができます。







ウォレットへの最後の5つの着信クレジットのリクエストの例は次のようになります。







 POST /api/operation-history HTTP/1.1 Host: money.yandex.ru Authorization: Bearer 410012345678901.7EE34A50588723226C886A475AD1D415471BF687CCC2AFC7664BA12F4EC2BDBA1EB82625E49BC29D114A6C6AF12F87639A877E81A5B77B81F003A9DB4CCEB9BD80C6E70B157C18410E884465276AACBD58C2D7B6022CBDFD0004B80704E82D3F0E4039A29655EFAA44F037D6BF763B0B803329FE8A0E511057173B04341C4317 Content-Type: application/x-www-form-urlencoded records=5&type=deposition
      
      





Yandex.Moneyサービスが回答できるものは次のとおりです。







 { "next_record": "5", "operations": [ { "operation_id": "548936732440013012", "title": "   ", "amount": 1.96, "direction": "in", "datetime": "2017-05-24T10:25:32Z", "label": "123007", "status": "success", "type": "deposition" }, { "pattern_id": "p2p", "operation_id": "1097872036856016025", "title": "  410012345678902", "amount": 0.99, "direction": "in", "datetime": "2017-05-24T10:13:38Z", "status": "success", "type": "incoming-transfer" }, { "operation_id": "548428048231013012", "title": "   ", "amount": 1.96, "direction": "in", "datetime": "2017-05-18T13:07:28Z", "status": "success", "type": "deposition" }, { "operation_id": "548427906481013012", "title": "   ", "amount": 1.96, "direction": "in", "datetime": "2017-05-18T13:05:06Z", "status": "success", "type": "deposition" }, { "pattern_id": "p2p", "operation_id": "1096319740674326025", "title": "  410012345678903", "amount": 0.01, "direction": "in", "datetime": "2017-05-15T10:37:50Z", "status": "success", "type": "incoming-transfer" } ] }
      
      





履歴へのリクエストに基づくサービスの別の例は、フォーラムでの一括購入です。人々はチップを入れて低価格で大量に注文することに同意し、主催者は自分の財布にお金を集めます。 誰もが購入に参加している人数とお金の使い道を見るために、Yandex.Money APIに基づいた多くのサービスの1つを使用できます。 これらのサービスのいずれかで、コレクターがウォレットでログインするだけで十分です。







#3バランスチェック



ゲームのストリーマーは多くの場合複数のモニターで動作するため、Yandex.Moneyチームは、お金を集める目標、必要な金額を指定して進捗を追跡できるウィジェットを開発しました。 たとえば、ストリーマーは新しいPlayStation 4を購入したいと考えています。必要な金額がウォレットに収集されると、Yandex.Moneyは注文する時間であるという通知をウィジェットに送信します。







画像の代替テキスト

蓄積ウィジェット。







別の例として、ストリーミングサービスが残高への継続的なアクセスを必要とする場合、ロイヤルティプログラムがあります。たとえば、ピザをすぐに注文できるストリーマーの個人アカウントを割引価格で提供できます。 しかし、その前に、サービスは口座のお金が注文に十分であることを確認する必要があります。

残高を表示するには、 account-infoメソッドを使用できます







 POST /api/account-info HTTP/1.1 Host: money.yandex.ru Authorization: Bearer 410012345678901.1578E01607EB3899853D2883E47841A195BC561F1F8CF479D593B662AD60B2D146EE49F02D750CB2972E51E0DF10369AE77FD930D82B7563AA0D65FA709A7C31EB59D4FFC1F2E85A14A817BDFB282C5A82FF1B79C65D2AE7B3BAE1C1C7D89CBE80477FF1C51A8F3DD9A032475BE629235949B7A2CA7823AC6AC06DB3176F9B54 Content-Type: application/x-www-form-urlencoded
      
      





応答として、サーバーは次を返します。







 { "account": "410012345678901", "balance": 192.45, "currency": "643", "account_type": "professional", "identified": true, "account_status": "identified", "cards_linked": [ { "type": "MasterCard", "id": "4005641800", "pan_fragment": "532130******2227" } ], "balance_details": { "total": 192.45, "available": 192.45, "blocked": 1 } }
      
      





その結果、貸借対照表に関する詳細な情報だけでなく、リンクされた銀行カードに関する情報も表示されます。マスクされたカード番号、タイプ、リンクされたカードの識別子です。







APIを介したバランスのチェックが役立ついくつかのシナリオがあります。
  • 私のお気に入りの例は禅マニです。 これは、ユーザーが自分の予算を追跡し、将来の費用を計画するのに役立つサービスです。 Zen-man開発者は、ユーザーがYandex.Moneyウォレットをアプリケーションに添付して、新しい経費トランザクションと収益を独立して追加できるようにすることを提案しました。 もちろん、このオプションは、その購入の大部分を支払うアクティブなウォレットユーザーにのみ役立ちます。 そして、これは本当に大きなメリットです。なぜなら、個人の財政の会計においては、プログラムの費用を忘れずに忘れることが最も難しいからです。 Geektimesの Zen maniの記事で、すべての仕組みを読むことができます







  • またはClassto-保護者と教師間のコミュニケーションのためのサービス。 それを使用すると、現金ではなくクラスのニーズに合わせて一般的なウォレットに集めることができますが、アプリケーションで銀行カードから直接転送します。 また、残高を確認して、どのくらいのお金が集められたかを調べることもできます。これは、料金や費用の透明性の重要な要素です。両親はこの情報を見ています。




#4ウォレットからの転送



APIを使用すると、ウォレットからの転送だけでなく、リンクされたカードからの転送も開始できます。 これは、財布にお金を入れておらず、それをレイヤーとして使用してインターネット上のカードを照らさないようにする人々との即時決済に便利です。 同時に、リンクされたカードからの自動控除でさえ承認される必要があるため、支払人は依然として費用を管理できます。







仕組み:







  1. ユーザーから確認を受け取った後、APIはウォレットから要求された金額を差し引きます。







  2. 残高に十分なお金がない場合、サービスはnot_enough_fundsを応答します







  3. さらに、ユーザーが許可した場合、サービスはウォレットに結び付けられたカードからお金を引き落とすことができます。 リンクされたカードからの自動引き落としは、正当な受取人のみが利用できます。 また、ウォレット間で送金する場合、カードからお金を引き落とすことはできません。


ストリーマーは、視聴者に、放送やソーシャルネットワーク、ギフト、またはストリームの次のゲームを選択する権利に対する一般の感謝を定期的に転送するように動機付けることができます。







サブスクリプションは次のとおりです。







  1. 「サポート」ボタンの隣に、「このストリーマーを支持して毎月の支払いを申し込む」ことがあります。







  2. ユーザーが[サポート]ボタンをクリックすると、開発者は定期的な支払いの条件を確認し、Yandex.Moneyへのリクエストで要求された権利のリストを調整します。


ウォレットでの操作について話しているので、それを実行する許可を要求する必要があります。アクセスの要求は例1とほぼ同じですが、権利の範囲は変わります。







要求された権利のセットは、1000ルーブルの金額をウォレット410012345678901に一度だけ転送できるようにするもので、次のとおりです。







 payment.to-account("410012345678901").limit(,1000)
      
      





送信者が定期支払いにサインアップしている場合、承認には次の意味があります。







 payment.to-account("410012345678901").limit(30,1000)
      
      





ここで、30は日単位の期間であり、1000はその期間の合計支払い額です。







通常の請求リクエストの例:







 POST /oauth/authorize HTTP/1.1 Host: money.yandex.ru Content-Type: application/x-www-form-urlencoded client_id=49414287408917F4BC735301F4731878533F409F3BA8EA055D0D441EE002F69B&redirect_uri=http%3A%2F%2Fexample.com%2Fapi%2Fredirect_uri.php&response_type=code&scope=payment.to-account(%22410012345678903%22).limit(30%2C1000)
      
      





送信者には美しいフォームが表示されます。







画像の代替テキスト







トークンを受け取った後、開発者は、 リクエスト 支払いメソッドとプロセス支払いメソッドを使用して償却する必要があります







 POST /api/request-payment HTTP/1.1 Host: money.yandex.ru Content-Type: application/x-www-form-urlencoded Authorization: Bearer 410012345678901.D2E0917C3E09DE474DD3BF6288DDCB6818D55B6BBC8A9386ABA2A983F3F4666102F9B7A2D370D7079891299907368389F3BA8E2BE04597DCFF4CF02F4E3423896776D1C5CCE30A09B5D2E73874C5FE33CAE19286EAB03D146B46A188939BEC1ADA93F3530ECBFACA2591715F686EDBC9F616A7BF912CF4DC9CFB689473328347 pattern_id=p2p&to=410012345678903&amount=10&comment=Transfer+to+Nuke73&message=Transfer+from+SuperMan
      
      





回答例:







 { "status": "success", "request_id": "333235373335343733345f646366303562383436613661306133373130663766343166303137666131336262656637353539655f323537353532373836", "recipient_identified": true, "multiple_recipients_found": false, "recipient_account_type": "professional", "recipient_account_status": "identified", "contract_amount": 10, "money_source": { "cards": { "allowed": false }, "wallet": { "allowed": true }, "card": { "allowed": "false" } } }
      
      





転送と手数料といえば。 あなたの個人口座では、誰が振替手数料を支払うかを選択できます- 金額amount_dueパラメータがこれを担当します。 支払いテンプレートでamount_dueパラメーターが指定されている場合、この金額はストリーマーのウォレットに送られます(料金は視聴者によって支払われます)。 ストリーマーがそれ自体でそれを使用する準備ができている場合、量パラメーターが入力で示されます。 したがって、金額(転送される金額)は、コミッションとamount_due(受領される金額)の金額に等しくなります。

転送は、ユーザーが参加せずにプロセス支払いメソッドを呼び出した後に実行されます。ユーザーは、アクセス承認中に意図を確認しました。 request_idとして、request-paymentメソッドの応答からの識別子が使用されます。







 POST /api/process-payment HTTP/1.1 Host: money.yandex.ru Content-Type: application/x-www-form-urlencoded Authorization: Bearer 410012345678901.D2E0917C3E09DE474DD3BF6288DDCB6818D55B6BBC8A9386ABA2A983F3F4666102F9B7A2D370D7079891299907368389F3BA8E2BE04597DCFF4CF02F4E3423896776D1C5CCE30A09B5D2E73874C5FE33CAE19286EAB03D146B46A188939BEC1ADA93F3530ECBFACA2591715F686EDBC9F616A7BF912CF4DC9CFB689473328347 request_id=333235373335343733345f646366303562383436613661306133373130663766343166303137666131336262656637353539655f323537353532373836
      
      





回答例:







 { "status": "success", "payer": "410012345678901", "payee": "410012345678903", "credit_amount": 9.95, "payment_id": "549038975018120011" }
      
      





すばらしい-ウォレットからの引き落としは成功しました。







#5クレジットカードからの転送



銀行カードからの振替は、ウォレットからの振替とは異なります。









転送が成功すると、 request-external-paymentメソッドは次を返します。







 { "status": "success", "title": "   410011498692222", "contract_amount": 102.04, "request_id": "333235373135303437315f36313764393332336462393164373433353264303465346432626262313465353933363763333133", "money_source": { "payment-card": {} } }
      
      





request_id(支払いコンテキストの一意の識別子)を受け取ったら、支払いトランザクションを開始し、ユーザーをYandex.Moneyフォームにリダイレクトできます。 これを行うには、acs_paramsパラメーターを使用してacs_uriでPOST要求を使用します。ここで、支払人は銀行カード情報を指定する必要があります。







リクエストの例:







 POST /api/process-external-payment HTTP/1.1 Host: money.yandex.ru Content-Type: application/x-www-form-urlencoded request_id=333235373135303437315f36313764393332336462393164373433353264303465346432626262313465353933363763333133&instance_id=hh2CVJWrU9uU7N2hpEh1LvjfyBAby8USyMUEF4DM8AS6w93o53M3xrlGHsMUiWTL&ext_auth_success_uri=http%3A%2F%2Fexample.com%2Fsuccess%2F&ext_auth_fail_uri=http%3A%2F%2Fexample.com%2Ffalse%2F&request_token=false
      
      





そして答えは:







 { "status": "ext_auth_required", "acs_uri": "https://m.money.yandex.ru/internal/public-api/to-payment-type", "acs_params": { "cps_context_id": "333235373135303437315f36313764393332336462393164373433353264303465346432626262313465353933363763333133", "paymentType": "FC" } }
      
      





画像の代替テキスト

Yandex.Moneyのカードフォーム。







直接支払いはYandex.Moneyの責任です。 銀行カードの詳細を指定して[Pay]ボタンをクリックすると、ユーザーは発行銀行の3-Dセキュアページに移動し、パスワードを入力した後、開発者のサービスに戻ります。支払い確認(ext_auth_success_uri) 発行銀行が認証を拒否した場合、ユーザーはエラーページ(ext_auth_fail_uri)にリダイレクトされます。







開発者は、process-external-paymentメソッドを呼び出すときにリダイレクトアドレスを指定できます。

3-D Secureを確認した後、支払い者が成功ページに移動するとき、クレジットカードによる承認も成功することを確認する必要があります。 これを行うために、開発者は以前に受け取ったrequest_idで process-external-paymentを再呼び出しします







回答例:







 { "status": "success", }
      
      





通常、認証後10〜20秒の間隔でカードの承認が行われます。 process-external-paymentを繰り返し呼び出したときに、銀行から承認ステータスを受け取っていなかった場合、開発者は間違いなくそれを確認します。







同様の答えの例:







 { "status": "in_progress", "next_retry": "5000" }
      
      





Next_retry-リクエストを繰り返す必要がある推奨時間(ミリ秒)。 フィールドはin_progressステータスでのみ存在します。







追加機能:フォームとボタンのコンストラクター



APIを使用した支払いソリューションには、ある程度の努力と複雑な技術的相互作用が必要です。 より簡単なオプションは、 既製の Yandex.Moneyのカスタムフォームを使用することです。これらでは、転送に関する情報がパラメーターに分割され、POSTメソッドを使用して特別なアドレスに送信されます。







画像の代替テキスト







Yandexのストリーマーウォレットへの転送形式のインターフェースの例。







カスタムフォームを使用した翻訳スクリプトは次のようになります。







  1. 送り主は、電子ウォレットまたは銀行カードから送金方法を選択します。







  2. 開発者は、Yandex.Money パラメータのセットから文字列を生成し、POSTメソッドを使用して、さらに識別できるように一意の支払いラベル(ラベル)とともに住所money.yandex.ru/quickpay/confirm.xmlに転送します。 開発者は、操作の詳細を自分のデータベースに保存します。







  3. 支払人は支払方法を選択し、Yandex.Money側で送金を確認するページに移動し、金額がストリーマーのウォレットに引き落とされます。 もちろん、マイナスの手数料。







  4. 受信者は、HTTP通知、電子メール、SMS、プッシュを通じて資金の受領について学習します。 通知ハンドラのアドレスは、ウォレット設定で事前に指定する必要があります。







  5. 開発者は、プロセッサのアドレスで受信した詳細を分析し、さらなるアクションを決定します。 私たちのケースでは、着信金額がストリーマーの条件を満たした場合、動画の伴奏付きのサブスクライバーのメッセージがビデオストリームで送信されました。 メッセージはSpeechKitテクノロジーを使用して再生されました。


このシナリオには1つの欠点があります。サービスが適切に機能するには、ストリーマーがウォレット内のHTTP通知の設定を使用して不必要に操作する必要があります。







APIとは異なり、フォームとボタンを使用すると、リンクされた銀行カードから送金できます。 ただし、手数料は受取人からのみ取得されます。







ストリーマーからの不必要な操作を必要としないために、操作の履歴を確認し、一意の翻訳ラベルをデータベースのデータと比較する方法を学習するだけで十分です。 ストリーマーの操作へのアクセスを取得することのみが残っています。記事の冒頭で、ストリーマーに権利account-infoおよびoperation-historyへのアクセスを確認するように依頼しました。 最初の方法はストリーマーのウォレットの番号を見つけるのに役立ち、2番目の方法は操作に関する情報です。







これは、ストリーマーウォレットの最後の2つの操作のリクエストへの応答が、操作履歴メソッドを使用してAPIを通じてどのように見えるかです(転送はカスタマイズされたフォームを介して行われました)。







 { "next_record": "2", "operations": [ { "operation_id": "549575176734053012", "title": "   ", "amount": 49, "direction": "in", "datetime": "2017-05-31T19:46:16Z", "label": "yadonate#1782", "status": "success", "type": "deposition" }, { "pattern_id": "p2p", "operation_id": "1098088627442030025", "title": "  410011498790000", "amount": 9.95, "direction": "in", "datetime": "2017-05-25T16:18:33Z", "label": "testpayment", "status": "success", "type": "incoming-transfer" } ] }
      
      





ストリーマーウォレットへの転送の成功を確認した後、ビデオストリームにお気に入りのマジックを作成できます。







この投稿では、ストリーミングサービスにAPIを使用するための最も基本的なアイデアとシナリオのみを検討しました。 不明な点がある場合は、コメントでお気軽にお問い合わせください。 また、読者の中にストリーマーやその視聴者がいる場合は、寄付をより便利で楽しいものにする方法について意見を共有してください。







Yandex.Eventsへの参加を登録できます。 プロトタイプとプロファイルは2017年8月1日まで受け付けています。







ネジから!








All Articles