モバむルアカりントのタむムリヌな補充システム



倚くの人が、シャワヌや食事など、本圓に重芁で壮倧なこずをするために、特定の䞀連のアクションを自動化するずいうアむデアを思い぀いたず思いたす。 このストヌリヌは、そのようなアむデアの1぀を実装するものです。



内容



指定および略語

はじめに

1. サヌビスずシステムの説明

2. プロゞェクトの目的

3. プロゞェクトの説明

3.1。 個人アカりントのステヌタスを取埗するための資金

3.2。 毒を扱うためのツヌル

3.3。 Twitterツヌル

4. 仕事ず論理

結論

䜿甚されおいる゜ヌスのリスト



指定および略語



LISA-加入者の個人むンタヌネットサヌビス。

毒-Yandex.Money;

ドリンクポむズン-Yandex-walletにお金を皌ぎたす。

DBはデヌタベヌスです。



はじめに



私は、倚くの人ず同じように、私たちの生掻の䞭には、過床に耇雑で混乱しおいるものがたくさんあり、単玔化が必芁だず思いたす。 携垯電話䌚瀟から残高がれロに近づいおいるずいうテキストをもう䞀床受け取ったずきに、同じ考えが思い浮かびたした。もう䞀床、毒に行き、承認を通過し、クリックしお支払いを繰り返し、確認し、指瀺したした実行を埅っおいる支払いパスワヌドは、毒を残したした。 どういうわけか倚くのアクション、あなたは思いたせんか そのように思えたし、実際、それは非垞に退屈なプロセスであり、自分に合ったより簡単な方法を芋぀ける必芁がある。



プロセスが私を捕たえたので、私は今確信が持おないこずに泚意したい-これらすべおに時間を節玄できたのか、それずもそのたたにしおおくほうが簡単だったのか しかし、私はそのような人物です。あらゆる皮類の興味深い掻動にすぐに倢䞭になりたす。そのため、実装プロセス自䜓が最終結果よりも倧きな喜びをもたらしたした。



1.サヌビスずシステムの説明



LISA -Motiv Companyの加入者が個人アカりントの珟圚の状態を管理し、むンタヌネット経由でサヌビスを䜿甚できるようにするサヌビス。



毒 -電子決枈システム。 倚くの店舗や䌁業が毒のサポヌトを実装しおいたす。これにより、商品やサヌビスの支払いを簡単か぀簡単に行うこずができたす。 「動機」は、毒を通しおバランスを補充する機䌚が実珟された䌁業の1぀にすぎたせん。



Twitterは、Webむンタヌフェヌス、SMS、むンスタントメッセヌゞングツヌル、たたはサヌドパヌティのクラむアントプログラムを䜿甚しお、ナヌザヌが短いテキストノヌト最倧140文字を送信できるようにするシステムです。 Twitterの特城は、投皿されたメッセヌゞが䞀般に公開されおいるこずです。これにより、ブログず同様になりたす。



目次に戻る→



2.プロゞェクトの目的



毒りォレットから携垯電話の残高を補充するシステムの実装は、プロゞェクトの䞻なタスクです。残高の補充は、特定の呚期性なしで行われる必芁がありたす。 モバむルアカりントは、必芁な堎合にのみ補充する必芁がありたす。



システムには以䞋を含める必芁がありたす。

  1. 個人アカりントのステヌタスを取埗するための資金;
  2. 毒を扱う手段;
  3. Twitterで䜜業するためのツヌル。


目次に戻る→



3.プロゞェクトの説明



プロゞェクトはMasterhostサむトにあり、孊生サポヌトプログラムの䞀環ずしお、ホスティングは無料で受けられたす。 このサヌビスはWindowsの関皎では提䟛されおいなかったため、curlを有効にしおスケゞュヌラに関する情報を取埗するには、テクニカルサポヌトに連絡する必芁がありたした。 UNIXサヌバヌ䞊のcrontabに゚ントリを远加するこずが提案されたしたが、私はそれに同意したした。 スクリプトぞのリンクを指定し、10分の頻床を瀺したした。その埌、スクリプトが倧きな負荷を䜜成する堎合は無効にする必芁があるず譊告されたした。



目次に戻る→



3.1。 個人アカりントのステヌタスを取埗するための資金


最初のバヌゞョンでは、モバむルアカりントの状態をFOX Webサむトから盎接取埗する必芁がありたしたが、非垞に長い時間がかかり、垞に結果が埗られるわけではありたせんでした。操䜜の時間が10秒に達するこずもあり、これは単に受け入れられたせんでした。



図3.1-LISAサヌビスのサむト。



Motiv Companyの技術サポヌトずの長く容赊のないコミュニケヌションの埌、近い将来、個人口座の珟圚の残高を衚瀺するように蚭蚈されたBalance Gadgetが導入されるこずを知りたした。 さらに、倖郚むンタヌフェむスのサヌビスの予定はないずいう情報を受け取りたしたが、これは䞍芁になったため、ガゞェットからすべおの情報を取埗できるず確信したした。



図3.2-「バランスガゞェット」に関する情報ずその圢成ボタン。



以前は、Windows 7たたはVistaのガゞェットを䜿甚する必芁はありたせんでした。オペレヌティングシステムをむンストヌル/再むンストヌルした埌、必芁性がわからなかったため、すぐにすべおをオフにしたした。自宅のコンピュヌタヌには叀き良きWindows XPがありたす。



図3.3-「バランスガゞェット」の内郚構造。



「motiv_balance.gadget \ js」ディレクトリには、次のファむルが含たれおいたす。

私はbalance.jsファむルの調査を開始し、すぐに芁求が生成されお送信される目的のgetInfo関数を芋぀けたした。

_req = new ActiveXObject("Microsoft.XMLHTTP"); /*don't change this sequence! it invokes non-ordering requests: xz why*/ _req.open("GET", url, true);
      
      



応答が予期されるず、結果の凊理ず衚瀺を担圓するshowResponse関数に枡されたす。



既にお気付きのずおり、オペレヌタヌのサむトぞのアクセスは、いく぀かのパラメヌタヌで構成される通垞のGETリク゚ストにすぎたせん。

これは次のようなものです。

  b = System.Gadget.docked ? 'a' : 'b'; a = Math.round(Math.random() * 10000); /*it should be global: no ideas why*/ var url = "https://gadget.motivtelecom.ru/?uid=UID&b="+b+"&a=" + a;
      
      



これに応じお、アカりントの珟圚の状態に関するいずれかの情報を取埗したす。次に䟋を瀺したす。

  3 = RUB80ルヌブル。45k。 
ここで、3は䜜成時のガゞェットのバヌゞョン番号var VERSION = 3;、たたは詳现な説明を含む゚ラヌ通知です。

  3 = ERR 


この知識を歊噚に、cURLがリク゚ストを送信する簡単な関数を䜜成したした。
  $req_lisa = array( CURLOPT_HEADER => 0, CURLOPT_CONNECTTIMEOUT => 10, CURLOPT_TIMEOUT => 10, CURLOPT_SSL_VERIFYPEER => 0, CURLOPT_SSL_VERIFYHOST => 0, CURLOPT_RETURNTRANSFER => TRUE, CURLOPT_URL => LISA_URL ); $ci = curl_init(); curl_setopt_array ($ci, $req_lisa); $result_lisa = curl_exec($ci);
      
      



芁求を完了しお結果を凊理するのに必芁な時間は、10秒から0.26秒に枛少したした。



目次に戻る→



3.2。 毒を扱うためのツヌル


毒を扱うには以䞋が必芁です
  1. ドキュメントを調べたす。
  2. アプリケヌションを登録client_idを取埗;
  3. 䞀時トヌクンを取埗したす1分未満。
  4. 認蚌トヌクンを取埗したす1幎間。


図3.4-登録枈みアプリケヌションに関する情報。



受け取った認蚌トヌクンは1店舗Motiv Companyに制限されおおり、珟圚のアカりント情報を芋るこずができる週に1,000ルヌブルの制限がありたす。

 scope=payment.to-pattern("1122").limit(7,1000) account-info
      
      



これで、自由にメ゜ッドを䜿甚できたす。 支払いを行うには、支払いテンプレヌトを䜜成したす。

pattern_id = 1122PROPERTY1 = 908PROPERTY2 = 9089XXXsum =s

すべおが正しい堎合、ポむズンのリク゚スト-支払いリク゚ストを送信するず、ステヌタスパラメヌタの倀「success」ず目的のrequest_idを持぀json文字列を取埗したす。「success」以倖のすべおは、倱敗ず同等であり、さたざたな芁因に䟝存したす。たずえば、Yandex偎の技術的な問題、店舗偎の技術的な問題などです。

すべおが正垞な堎合は、request_idを含むプロセス支払いリク゚ストを送信し、支払いを確認したす。

 $yad = json_decode($result, 1); if ( $yad['status'] == 'success' ) { $pay_fields = sprintf($process_fields, $yad['request_id']); curl_setopt($ci, CURLOPT_URL, YM_PROC_URL); curl_setopt($ci, CURLOPT_POSTFIELDS, $pay_fields); $result_pay = curl_exec($ci); curl_close($ci); return json_decode($result_pay, 1); }
      
      



支払いが成功たたは倱敗した堎合、statusパラメヌタヌを含むjson文字列も取埗したす。 ステヌタスパラメヌタが「成功」の堎合、支払い番号ずアカりントステヌタス情報が返されたす。



目次に戻る→



3.3。 Twitterツヌル


既補のラむブラリが䜜業甚に遞択されたした。開発者向けにサむトにアプリケヌションを登録し、䜜業に必芁なすべおのパラメヌタヌを取埗するだけで枈みたした。

同じツむヌトがTwitterで公開されるず非垞に退屈でクヌルではないように思えたので、ボットアプリケヌションが珟圚動䜜しおいる䞀連のフレヌズをスケッチしたした。

 function GetRandomTwit() { $music_bands = array ( 'Queen', 'Coldplay', 'Muse', 'Justice', 'Duft Punk', 'Radiohead', 'Adele', 'Beatles', 'Red Hot Chili Peppers', 'Foo Fighters', 'Killers', 'Gorillaz' ); $rand_music_band = $music_bands[rand(0, sizeof($music_bands)-1)]; $twi_mask = array ( '  ,  ,  %1$s #motiv #motivtelecom #wtf', '   : %1$s #motiv', ' ,   %1$s #motiv', '%1$s    #motiv', '#motiv   !    %1$s', '  .,   %3$s. : %1$s #motivtelecom', '%1$s   ,  ? #motiv', ' - ,   %1$s #motiv', '  '.$rand_music_band.'  ...     %1$s #motiv', '!     %1$s #motiv #motivtelecom #whyyyyyy', ', #motiv    , ,     ;)  %2$s .', ' ,  ,    !  ,   %1$s', '     ,  ,     %1$s #motivtelecom', 'YU SO GREEDY? %2$s rub #motiv #motivtelecom', '#motiv    !  %1$s #motivtelecom #yusogreedy', '  ,      ,       !  %2$s .', '   GPRS- : %3$s.   : %1$s #motiv', ',      :( %2$s . #motiv #motivtelecom', ' -,   '.$rand_music_band.',    %2$s . #motiv #'.str_replace(' ','', strtolower($rand_music_band)), '      ..    ! :(    %2$s .', '#motiv     '.$rand_music_band.'  ? , %2$s   .', '  !   %1$s #motivtelecom', ',   ,   - - %)    %1$s #motiv', '   ,   ,   %3$s :)   %2$s .', '  ,     ? , ,    %2$s . #motiv', ' -  ,       . #motiv', 'BREAKING NEWS! Balance: %2$s rub.', '    ,    ! ,    %2$s .' ); return ($twi_mask[rand(0, sizeof($twi_mask)-1)]); }
      
      



ラむブラリは非垞に簡単に動䜜したす。

 $twitter = new Twitter(TWT_CON_KEY, TWT_CON_SEC, TWT_ACC_TOK, TWT_ACC_TOK_SEC); $twitter->send(sprintf(GetRandomTwit(), GetSumWithPost($current_bal_value), $current_bal_value, YM_WALLET));
      
      





目次に戻る→



4.仕事ず論理



このアプリケヌションの䞻なアむデアは、ボヌドをタむムリヌにするこずです。毎日50ルヌブルたたは100ルヌブルでバランスを補充する必芁はありたせん。この日に電話を䜿甚するこずはできず、Poisonに実装できるからです。 すべおのコンポヌネントがすでに存圚し、動䜜しおいるため、䜜業のロゞック次第でした。



䞍芁なチェックを省略するず、すべお理解できる圢匏になりたす。

1.い぀補充するかを知るために珟圚の残高を確認したす。珟圚、口座にあるお金の量に垞に泚意する必芁がありたす。

2.バランスの基準倀100ルヌブルず電流の差を決定したす。

2.1。 差は蚭定倀20ルヌブルよりも倧きくなりたす。

2.1.1。 支払いをしたす。

2.1.2。 デヌタベヌスに新しい倀を曞き蟌んでいたす。

2.1.3。 私はTwitterで曞いおいたす。

2.2。 差は蚭定倀20ルヌブル未満です

2.2.1。 珟圚の倀をデヌタベヌスに蚘録された最埌の倀ず比范したす。差が正の堎合、残高は補充されおいたす。

2.2.1.1。 デヌタベヌスに新しい倀を曞き蟌んでいたす。

2.2.1.2。 私はTwitterで、倖郚の誰かが残高を補充したず曞いおいたす。

2.2.2。 差が負で、指定された倀-5ルヌブルより小さい堎合、珟圚の倀をデヌタベヌスに最埌に蚘録された倀ず比范したす。

2.2.2.1。 デヌタベヌスに新しい倀を曞き蟌んでいたす。

2.2.2.2。 Twitterでバランスが倉わったず曞いおいたす。



考慮すべきいく぀かの泚意事項がありたす。

-Motiv䌚瀟は、10ルヌブル未満の支払いを受け付けたせん-これは、口座の珟圚の状態ず参照蚭定倀ずの差額が少なくずも10ルヌブルでなければならないこずを意味したす。

-倚くの堎合、アカりントの補充に぀いおTwitterに投皿しないために、20ルヌブルが䜿甚されたした。

-䞊蚘の5ルヌブルの差が理由で取られたため、以前はたったく制限がなく、アプリケヌションは10分ごずに残高が7コペックたたはそれ以䞋倉化したこずをTwitterで通知したした-それは私を動かしたしたあるリミッタヌを入れお、最初は1ルヌブルでしたが、これでは十分ではありたせんでした。リミッタヌは5ルヌブルで、もう䜕も気にしたせん。

-珟圚の倀ずリファレンスの差が100ルヌブルを超える堎合、䜕かが間違っおいるず疑い始め、同じ原理に埓っお、最初に100ルヌブル、残りのお金の郚分のバランスを補充したす。
 $pay_bot = (floor(BAL_LEVEL-$current_bal_value)>BAL_PAY_LEVEL_MAX)?BAL_PAY_LEVEL_MAX:(floor(BAL_LEVEL-$current_bal_value));
      
      



質問に答えるのに十分な時間がありたす。「お金はどこに行きたしたか なぜそんなに倧きなマむナスですか 誰のせいですか」、お茶を飲み、最埌にボットをオフにしたす。



  $pay_bot = (floor(BAL_LEVEL-$current_bal_value)>BAL_PAY_LEVEL_MAX)?BAL_PAY_LEVEL_MAX:(floor(BAL_LEVEL-$current_bal_value)); if ( $pay_bot >= BAL_PAY_LEVEL ) { $pay_bot += BAL_UP_SUM; $ym_pay_state = YandexMoneyPay($pay_bot); if ( $ym_pay_state['status'] == YM_PAY_STAT ) { $twitter = new Twitter(TWT_CON_KEY, TWT_CON_SEC, TWT_ACC_TOK, TWT_ACC_TOK_SEC); $twitter->send(sprintf($plus_pay, GetSumWithPost($pay_bot), GetSumWithPost($current_bal_value+$pay_bot), GetSumWithPost($ym_pay_state['balance']))); } } else { $pay_user = floor($current_bal_value - $last_bal_value); $bal_diff = $last_bal_value - $current_bal_value; if ( $pay_user > 0 or $bal_diff >= BAL_CHANGE_LEVEL ) { $twitter = new Twitter(TWT_CON_KEY, TWT_CON_SEC, TWT_ACC_TOK, TWT_ACC_TOK_SEC); if ( $pay_user > 0 ) $twitter->send(sprintf($user_pay, GetSumWithPost($pay_user), GetSumWithPost($current_bal_value))); elseif ( $bal_diff >= BAL_CHANGE_LEVEL ) $twitter->send(sprintf(GetRandomTwit(), GetSumWithPost($current_bal_value), $current_bal_value, YM_WALLET)); } }
      
      



支払いは、倀BAL_UP_SUMだけ増加するこずに泚意しおください。 これでBAL_UP_SUMの倀は1になり、䜕よりも蚈算が切り捚おで適甚され、99ルヌブルをコペックで超えお1ルヌブルを远加するこずがわかりたす。 たた、この倀を増やしお、アプリケヌションがTwitterに垞に曞き蟌みを行うこずを気にしないようにするこずができたす。



目次に戻る→



結論



この蚘事を曞いおいる時点で、答えが芋぀からないいく぀かの質問に出䌚いたした。

request-payment-requestぞの応答で倀「success」が来るものの、長い間、なぜポむズンを介しおモバむルアカりントに転送できなかったのか理解できたせんでした。 ドキュメントの䟋は次のずおりです。

pattern_id = 2904電話プレフィックス= 921電話番号= 9538XXXsum = 300.00

電話プレフィックスフィヌルドず電話番号フィヌルドの内容は、各ストアには必芁ありたせん。Motivの堎合、これらのパラメヌタヌはPROPERTY1およびPROPERTY2ずいう名前です。MTSたたはMegafonの堎合、これらのフィヌルドには他の名前を付けるこずもできたす。 動機の分野は、API Poisonクラブのモデレヌタヌによっお促されたした。 これらのフィヌルドの倀を知っおいるず、支払い時に単玔に名前からパラメヌタヌをストアパラメヌタヌに再割り圓おできないのはなぜですか



そしおもう1぀の質問は、最初の質問に盎接関係しおいたす。 䜕らかの理由で無効なフィヌルド名を含むリク゚ストを送信するず、「成功」ずいう倀が返され、request_idパラメヌタヌも返されたした。これにより、支払いを確認する必芁がありたす。 もちろん、そのような支払いは行われたせんでしたが、なぜステヌタスが成功したのですか 開発者のマニュアルには、「成功」は成功した実行であるず明確に蚘茉されおいたす。



誰かがこれらの質問に答えおくれたら嬉しいです。



感謝したい 䜜業結果 http : //twitter.com/001011010



目次に戻る→



䜿甚されおいる゜ヌスのリスト



1. Yandex.Money API。 開発者ガむド//サむトapi.yandex.ru/money/doc/dg/の資料 。

2. Yandex.Money API // clubs.ya.ru/moneyapi/の資料を䜿甚する開発者向けクラブ。

3. Twitter。 開発者向けのWebサむト//サむトdev.twitter.comの資料 。

4.フォックス。 バランスガゞェット//サむトlisa.motivtelecom.ruの材料。

5.サむトru.wikipedia.orgの資料。



All Articles