рдкрд╣рдЪрд╛рди
рд╣рд╛рдп, рд╣реЗрдмреНрд░! рдЖрдк рд╢рд╛рдпрдж рдЙрди рд╣рд╛рд▓рд┐рдпрд╛ рдШрдЯрдирд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рдЬреЛ рдРрдкреНрдкрд▓ рдХреЗ рд╢реЙрдкрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ "рд╣реИрдХрд┐рдВрдЧ" рдХреЗ рд░реВрдк рдореЗрдВ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдлреИрд▓реА рд╣реБрдИ рд╣реИрдВред рддреЛ, рдпрд╣ рдХрд╛рдлреА рдирд╣реАрдВ рдерд╛ред рдпрд╣ рд╣реИрдХ рднреА рдирд╣реАрдВ рдерд╛ред рдФрд░ рдореБрдЦреНрдп рдирд┐рд╖реНрдХрд░реНрд╖ рдЬреЛ рдореИрдВрдиреЗ рдмрдирд╛рдП рд╣реИрдВ:
- рдмрдВрдж <> рд╕реБрд░рдХреНрд╖рд╛
- Apple рдореЗрдВ, рдмрд╣реБрдд рдЖрд▓рд╕реА рд▓реЛрдЧ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ
рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдХреИрд╕реЗ рдФрд░ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдЬреЛрдбрд╝реЗрдВ, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рд╣реА рджрд┐рд╢рд╛ рдореЗрдВ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред
рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА
рдХреНрд▓рд╛рдЙрдб рдФрд░ рд╕рд░реНрд╡рд┐рд╕ рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреЗ рджрд┐рдиреЛрдВ рдореЗрдВ, рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкрд░ рдмрд╣реБрдд рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдФрд░ рд╡реНрдпрд░реНрдеред рдЬреИрд╕рд╛ рдХрд┐ рдЕрднреНрдпрд╛рд╕ рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ, рджреЛрдиреЛрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдФрд░ рд╕рд░реНрд╡рд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдмрд╣реБрдд рдЖрд▓рд╕реА рд╣реИрдВред рдХреЗрд╡рд▓ рдмрд╛рдж рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдПрдХ рдмрдбрд╝реЗ рдШреЛрдЯрд╛рд▓реЗ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдХрд░рддрд╛ рд╣реИред
рддреЛ рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рд╡рд╛рдВрдЫрд┐рдд рдЗрди-рдРрдк рдЦрд░реАрджрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдРрдкреНрдкрд▓ рд╕рд░реНрд╡рд░ рд╕реЗ 4 рд╕реЗ 6 рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рдкрд░ рдЦрд░реАрджрд╛рд░реА рдХреЛ рдорд╛рдиреНрдп рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЗ рд╕рд░реНрд╡рд░ рдХреЛ рдХрдИ рдЕрдиреБрд░реЛрдзреЛрдВ рддрдХред рдореИрдВ рд╕реЗрдм рд╕рд░реНрд╡рд░ рд╕реЗ рдЦрд░реАрджрд╛рд░реА рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдЦрд░реАрдж рдХреЗ рддрдереНрдп рдкрд░ рд╕реАрдзреЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛ред рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рд╕рд╛рдорд╛рдиреНрдп рдпреЛрдЬрдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
- 1. рдЦрд░реАрдж рдорд╛рдкрджрдВрдбреЛрдВ (рдРрдкреИрдбрд┐рдорд┐рдб, рдЬрд┐рд╕реЗ рд╕реЗрдм рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдФрд░ рдЙрд╕реА рд╕рдордп рдЦрд░реАрдж рдХреА рдкреБрд╖реНрдЯрд┐ рдкрд░ рдПрдХ рд╕рдВрд╡рд╛рдж рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
- 2. (рд╡реИрдХрд▓реНрдкрд┐рдХ) рд▓реЙрдЧ рдЗрди рдХрд░реЗрдВ
- 3. рдЦрд░реАрджрд╛рд░реА рдХрд░реЗрдВ
- 4. рдЦрд░реАрдж рдХреА рдкреБрд╖реНрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ
- 5. рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЦрд░реАрдж "рдЦрд░реАрджреА" рд╣реИ
- 6. (рд╡реИрдХрд▓реНрдкрд┐рдХ) рд╕рд╣реА рдЦрд░реАрдж рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ
рдЖрдЗрдП рд╣рдо рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ:
1. рдЬреЛ рд╣рдо рдЖрдкрдХреЛ рджреЗрддреЗ рд╣реИрдВ рд╡рд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдХреЛрдИ рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛
рдЦрд░реАрдж рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдПрдХ GET рдЕрдиреБрд░реЛрдз рд╣реИ
p()-buy.itunes.apple.com/WebObjects/MZFinance.woa/wa/offerAvailabilityAndInfoDialog
p()-buy.itunes.apple.com/WebObjects/MZFinance.woa/wa/offerAvailabilityAndInfoDialog
, рдореБрдЭреЗ рд╕рдордЭ рдирд╣реАрдВ рдЖрдпрд╛ рдХрд┐ рдирдВрдмрд░ рдХреИрд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ
$ _COOKIE ['рдкреЙрдб'] рдореЗрдВ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреНрд╖реЗрддреНрд░ред
GET рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд╕ рдХрд░рдирд╛:
'restrictionLevel' => '1000',
рд╣рдореЗрдВ рдЬрд╡рд╛рдм рдореЗрдВ PLIST рдорд┐рд▓рддрд╛ рд╣реИред рдЙрддреНрддрд░ рдХреЛ gzip рдореЗрдВ рдкреИрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕реЗ рдкрд╣рд▓реЗ рдЕрдирдкреИрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>jingleDocType</key><string>inAppSuccess</string> <key>jingleAction</key><string>offerAvailabilityAndInfoDialog</string> <key>dsid</key><string></string> <key>dialog</key> <dict> <key>message</key><string> ?</string> <key>explanation</key><string> - $1.99?</string> <key>defaultButton</key><string>Buy</string> <key>okButtonString</key><string>!</string> <key>okButtonAction</key><dict> <key>kind</key><string>Buy</string> <key>buyParams</key><string>quantity=1&salableAdamId=525477928&appExtVrsId=7736106&bvrs=1.0.0&offerName=com.gameloft.TDKR.cashpack1&productType=A&appAdamId=522704697&price=1990&bid=com.gameloft.TDKR&pricingParameters=STDQ</string> <key>itemName</key><string>com.gameloft.TDKR.cashpack1</string> </dict> <key>cancelButtonString</key><string></string> </dict> </dict> </plist>
рд╣рд╛рдВ, рдореИрдВрдиреЗ рдареАрдХ рд╣реА рдирдХрд▓ рдХреА рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рджреЗрддрд╛ рд╣реИ, рд░рд╛рдХреНрд╖рд╕реА рд░реЗрдЦрд╛ рдЯреВрдЯ рдЬрд╛рддреА рд╣реИ рдФрд░ PLIST рдХреЗ рдЕрдВрдд рдХреЗ рдмрд╛рдж рдЦрд╛рд▓реА рдмрд╛рдЗрдЯреНрд╕ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ krivoruky macaques рд▓рд┐рдЦрд╛ рдерд╛ред
рдпрд╣рд╛рдБ рд╣рдо рд╕рдмрд╕реЗ рдЬреНрдпрд╛рджрд╛ рд░реБрдЪрд┐ appAdamId рдореЗрдВ buyParams рд╕реЗ рд▓реЗ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдмрд╛рдХреА рд╕рднреА рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рд╣реИ (рдЬреЛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдЖрдкрдХреЛ рд╡рд╛рдкрд╕ + A & STDQ рдорд┐рд▓рддрд╛ рд╣реИ)ред рдордЬрд╝реЗ рдХреА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд▓рдЧрднрдЧ рд╕рднреА рдРрдк рдРрдкрдбреИрдо рдкрд░ рдереВрдХ рджреЗрддреЗ рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рд╢реАрд░реНрд╖рдХ рдХрд╣рддрд╛ рд╣реИ
, рд╣рдореЗрдВ рдЬреЛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рд╡рд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ ред
2. рдЧрдЬрд╝рд┐рдк рдХрд╣рд╛рдБ рд╣реИ? (рдпрд╛ рдРрдкреНрдкрд▓ рдЖрдИрдбреА рд╕реЗ рдкрд╛рд╕рд╡рд░реНрдб рдХреИрд╕реЗ рдЪрдордХрд╛рдПрдВ)
рдЗрд╕рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдПрдХ POST рдЕрдиреБрд░реЛрдз рдкреВрд░рд╛ рдХрд░рдХреЗ рдЦрд░реАрджрд╛рд░реА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
p()-buy.itunes.apple.com/WebObjects/MZBuy.woa/wa/inAppBuy
p()-buy.itunes.apple.com/WebObjects/MZBuy.woa/wa/inAppBuy
рдФрд░ POST рдбреЗрдЯрд╛ рдореЗрдВ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рдЕрдирдПрдиреНрдХреЛрдбреЗрдб PLIST рдореЗрдВ рдЧреБрдЬрд░рдирд╛ред рд╣рд╛рдВ, рдХреЛрдИ URLencode рдпрд╛ рдХрдореНрдкреНрд░реЗрд╢рди - рдХреЗрд╡рд▓ PLIST:
<?xml_version' => '"1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>appAdamId</key> <string>522704697</string> <key>appDsid</key> <string>1341894157</string> <key>appExtVrsId</key> <string>7736106</string> <key>bid</key> <string>com.gameloft.TDKR</string> <key>bvrs</key> <string>1.0.0</string> <key>guid</key> <string>xxxxxxxxx</string> <key>offerName</key> <string>com.gameloft.TDKR.cashpack1</string> <key>price</key> <string>1990</string> <key>pricingParameters</key> <string>STDQ</string> <key>productType</key> <string>A</string> <key>quantity</key> <string>1</string> <key>salableAdamId</key> <string>525477928</string> </dict> </plist>
рдпрджрд┐ рдЖрдкрдиреЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдРрдкрд╕реНрдЯреЛрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рд╕реЗрдм рдПрдХ рдкреАрдПрд▓рдЖрдИрдПрд╕рдЯреА рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдЧрд╛ред
рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ GET рдпрд╛ POST рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
p()-buy.itunes.apple.com/WebObjects/MZFinance.woa/wa/authenticate
p()-buy.itunes.apple.com/WebObjects/MZFinance.woa/wa/authenticate
рдЕрдм рд╕рд╛рдорд╛рдиреНрдп POST (urlencode) рднреЗрдЬрдиреЗ рдпрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:
'appleId' => 'appleid', 'password' => ' , ', 'rmp' => '0', 'attempt' => '0', 'accountKind' => '0', 'guid' => 'xxxx'
рдФрд░ рдЬрд╡рд╛рдм рдореЗрдВ, рдЖрдк рдЕрдкрдиреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рдЧрднрдЧ рд╕рднреА рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ, рдПрдХ рдЕрд╕рдореНрдкреАрдбрд┐рдд рд░реВрдк рдореЗрдВред рдмрд╕ рд╕рд░реМрддрд╛ рдФрд░ рд╕рднреА:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>accountInfo</key> <dict> <key>appleId</key><string>apleid</string> <key>accountKind</key><string>0</string> <key>address</key> <dict> <key>firstName</key><string></string> <key>lastName</key><string></string> </dict> </dict> <key>passwordToken</key><string> ( 15 )</string> <key>clearToken</key><string> - ( 15 )?</string> <key>is-cloud-enabled</key><string>false</string> <key>dsPersonId</key><string>ID ?</string> <key>creditDisplay</key><string></string> <key>creditBalance</key><string>1311811 ( , , )</string> <key>freeSongBalance</key><string>1311811 ( , , )</string> <key>status</key><integer>0</integer> </dict> </plist>
рдлрд┐рд░ рд╕реЗ рдЕрдирд╛рдбрд╝реА рдкреНрд▓рд┐рд╕реНрдЯ ...
@ рд╕рд╛рдЗрди рдЬрдирд░реЗрдЯ рдХрд░реЗрдВ
рдЦреИрд░, рдЪреВрдВрдХрд┐ рдЖрдк рдЗрд╕ рддрд░рд╣ рдХрд╛ PLIST рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХреГрдд рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЕрдиреБрд░реЛрдз рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ
p()-buy.itunes.apple.com/WebObjects/MZBuy.woa/wa/inAppBuy
p()-buy.itunes.apple.com/WebObjects/MZBuy.woa/wa/inAppBuy
рдФрд░ рдЕрдВрдд рдореЗрдВ рдЖрдкрдХреЛ рдПрдХ PLIST рдмрддрд╛рдПрдВ рдХрд┐ рд╣рд╛рдВ, рдпрд╣рд╛рдВ рдЖрдкрдХреА рдЦрд░реАрджрд╛рд░реА рдХрд╛ рд╡рд┐рд╡рд░рдг рд╣реИ:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>jingleDocType</key><string>inAppSuccess</string> <key>jingleAction</key><string>inAppBuy</string> <key>dsid</key><string></string> <key>download-queue-item-count</key><integer>1</integer> <key>app-list</key> <array> <dict> <key>item-id</key><integer>525477928</integer> <key>app-item-id</key><integer>522704697</integer> <key>version-external-identifier</key><integer>7736106</integer> <key>bid</key><string>com.gameloft.TDKR</string> <key>bvrs</key><string>1.0.0</string> <key>offer-name</key><string>com.gameloft.TDKR.cashpack1</string> <key>transaction-id</key><string>170000030394952</string> <key>original-transaction-id</key><string>170000030394952</string> <key>purchase-date</key><date>2012-07-28T14:30:19Z</date> <key>original-purchase-date</key><date>2012-07-28T14:30:19Z</date> <key>quantity</key><integer>1</integer> <key>receipt-data</key><data>base64 </data> </dict> </array> </dict> </plist>
рдпрд╣рд╛рдБ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдКрдкрд░ рд╕реЗ рджреЗрдЦрддреЗ рд╣реБрдП, рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИред Base64 рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рдЗрд╕рдореЗрдВ рдПрдХ рдПрдирдХреЛрдбреЗрдб NSdirectory рд╢рд╛рдорд┐рд▓ рд╣реИ:
{ "signature" = "AmJ2SQJx5yZI+t1XRiPBmRVxuoj8jatJkQ+VHCiMLA3Vek48A45NR02AJRNJkKG9+Ry3YgPBjZxifwnYZv1Ylm18NFblnmgDkValnktoL+5wFHcZZGN6//cmHs8p/RwV/rt/91XKVhNl4XIBimKjQQNfgHsDs6yju++DrKJE7uKsphMddKYfFE5rGXsAdBEjBwRIxexTevx3HLEFGAt1moKx509dhxtiIdDgJv2YaVs49B0uJvNdy6SMqNNLHsDLzDS9oZHAgMBAAGjcjBwMAwGA1UdEwEB/wQCMAAwHwYDVR0jBBgwFoAUNh3o4p2C0gEYtTJrDtdDC5FYQzowDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBSpg4PyGUjFPhJXCBTMzaN+mV8k9TAQBgoqhkiG92NkBgUBBAIFADANBgkqhkiG9w0BAQUFAAOCAQEAEaSbPjtmN4C/IB3QEpK32RxacCDXdVXAeVReS5FaZxc+t88pQP93BiAxvdW/3eTSMGY5FbeAYL3etqP5gm8wrFojX0ikyVRStQ+/AQ0KEjtqB07kLs9QUe8czR8UGfdM1EumV/UgvDd4NwNYxLQMg4WTQfgkQQVy8GXZwVHgbE/UC6Y7053pGXBk51NPM3woxhd3gSRLvXj+loHsStcTEqe9pBDpmG5+sk4tw+GK3GMeEN5/+e1QT9np/Kl1nj+aBw7C0xsy0bFnaAd1cSS6xdory/CUvM6gtKsmnOOdqTesbp0bs8sn6Wqs0C9dgcxRHuOMZ2tm8npLUm7argOSzQ=="; "purchase-info" = "base64 "; "pod" = ""; "signing-status" = "0"; }
+ VHCiMLA3Vek48A45NR02AJRNJkKG9 + Ry3YgPBjZxifwnYZv1Ylm18NFblnmgDkValnktoL + 5wFHcZZGN6 // cmHs8p / RWV / рдЖрд░ рдЯреА / 91XKVhNl4XIBimKjQQNfgHsDs6yju ++ DrKJE7uKsphMddKYfFE5rGXsAdBEjBwRIxexTevx3HLEFGAt1moKx509dhxtiIdDgJv2YaVs49B0uJvNdy6SMqNNLHsDLzDS9oZHAgMBAAGjcjBwMAwGA1UdEwEB / wQCMAAwHwYDVR0jBBgwFoAUNh3o4p2C0gEYtTJrDtdDC5FYQzowDgYDVR0PAQH / BAQDAgeAMB0GA1UdDgQWBBSpg4PyGUjFPhJXCBTMzaN + mV8k9TAQBgoqhkiG92NkBgUBBAIFADANBgkqhkiG9w0BAQUFAAOCAQEAEaSbPjtmN4C / IB3QEpK32RxacCDXdVXAeVReS5FaZxc + t88pQP93BiAxvdW / 3eTSMGY5FbeAYL3etqP5gm8wrFojX0ikyVRStQ + / AQ0KEjtqB07kLs9QUe8czR8UGfdM1EumV / UgvDd4NwNYxLQMg4WTQfgkQQVy8GXZwVHgbE / UC6Y7053pGXBk51NPM3woxhd3gSRLvXj + loHsStcTEqe9pBDpmG5 + sk4tw + GK3GMeEN5 { "signature" = "AmJ2SQJx5yZI+t1XRiPBmRVxuoj8jatJkQ+VHCiMLA3Vek48A45NR02AJRNJkKG9+Ry3YgPBjZxifwnYZv1Ylm18NFblnmgDkValnktoL+5wFHcZZGN6//cmHs8p/RwV/rt/91XKVhNl4XIBimKjQQNfgHsDs6yju++DrKJE7uKsphMddKYfFE5rGXsAdBEjBwRIxexTevx3HLEFGAt1moKx509dhxtiIdDgJv2YaVs49B0uJvNdy6SMqNNLHsDLzDS9oZHAgMBAAGjcjBwMAwGA1UdEwEB/wQCMAAwHwYDVR0jBBgwFoAUNh3o4p2C0gEYtTJrDtdDC5FYQzowDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBSpg4PyGUjFPhJXCBTMzaN+mV8k9TAQBgoqhkiG92NkBgUBBAIFADANBgkqhkiG9w0BAQUFAAOCAQEAEaSbPjtmN4C/IB3QEpK32RxacCDXdVXAeVReS5FaZxc+t88pQP93BiAxvdW/3eTSMGY5FbeAYL3etqP5gm8wrFojX0ikyVRStQ+/AQ0KEjtqB07kLs9QUe8czR8UGfdM1EumV/UgvDd4NwNYxLQMg4WTQfgkQQVy8GXZwVHgbE/UC6Y7053pGXBk51NPM3woxhd3gSRLvXj+loHsStcTEqe9pBDpmG5+sk4tw+GK3GMeEN5/+e1QT9np/Kl1nj+aBw7C0xsy0bFnaAd1cSS6xdory/CUvM6gtKsmnOOdqTesbp0bs8sn6Wqs0C9dgcxRHuOMZ2tm8npLUm7argOSzQ=="; "purchase-info" = "base64 "; "pod" = ""; "signing-status" = "0"; }
рд╣рдо рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдЙрд╕рдХрд╛ рд▓реЗрдЖрдЙрдЯ рд╣реИ:
RECEIPTVERSION | рд╣рд╕реНрддрд╛рдХреНрд╖рд░ | рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ рд╕рд╛рдЗрдЬрд╝ | рдкреНрд░рдорд╛рдг рдкрддреНрд░
1 рдмрд╛рдЗрдЯ 128 4 рдмрд╛рдЗрдЯреНрд╕ ...
рдпрд╣ рд╣реИ, рдЖрдо рддреМрд░ рдкрд░, рдПрдХ рдмреЛрддрд▓ рдореЗрдВ рдПрдХ рдкреНрд░рдорд╛рдг рдкрддреНрд░ + рд╣рд╕реНрддрд╛рдХреНрд╖рд░ред рдареАрдХ рд╣реИ, рд╣рдо рдЕрдкрдиреЗ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ (рдмрд╕ рдпрд╛рдж рд░рдЦреЗрдВ, рдХреБрдВрдЬреА рдХреА рд▓рдВрдмрд╛рдИ 1024 рд╣реИ!), рд╣рдо рдЗрд╕ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╡реЙрдЗрд▓рд╛, рдпрд╣рд╛рдВ рдЖрдкрдХреЗ рд▓рд┐рдП рдПрдХ рд╡реИрдз рдиреБрд╕реНрдЦрд╛ рд╣реИред рд╡реИрд╕реЗ, rece_version + base64 (рдЦрд░реАрдж_info) рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд┐рдП рдЧрдП рд╣реИрдВред рдФрд░ рд╡реИрд╕реЗ, рдореИрдХ рдРрдк рд╕реНрдЯреЛрд░ рдиреБрд╕реНрдЦрд╛ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рд╣реИред рдФрд░ рдПрдордПрдПрд╕ рдиреБрд╕реНрдЦрд╛ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╣реИ:

рдЦрд░реАрдж_info рдореЗрдВ рдПрдХ NS рд╕рд╣рд╛рд░рди рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
{ "original-purchase-date-pst" = "2012-07-28 07:30:19 America/Los_Angeles"; "purchase-date-ms" = "1343485819442"; "unique-identifier" = "xxxx"; "original-transaction-id" = "170000030394952"; "bvrs" = "1.0.0"; "app-item-id" = "522704697"; "transaction-id" = "170000030394952"; "quantity" = "1"; "original-purchase-date-ms" = "1343485819442"; "item-id" = "525477928"; "version-external-identifier" = "7736106"; "product-id" = "com.gameloft.TDKR.cashpack1"; "purchase-date" = "2012-07-28 14:30:19 Etc/GMT"; "original-purchase-date" = "2012-07-28 14:30:19 Etc/GMT"; "bid" = "com.gameloft.TDKR"; "purchase-date-pst" = "2012-07-28 07:30:19 America/Los_Angeles"; }
рдФрд░ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреНрдпрд╛ PLIST рдореЗрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдУрд╣, рдХреЗрд╡рд▓?
рдЕрдЪрд╛рдирдХ рдРрд╕рд╛ рд╣реБрдЖ рдХрд┐ рдЖрдкрдХреЛ рдПрдХ рд▓реЗрди-рджреЗрди рджрд┐рдпрд╛ рдЧрдпрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реБрдЖ? рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ, рдЖрдк рдХрд╣рддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ 1 рдФрд░ GET рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
p()-buy.itunes.apple.com/WebObjects/MZFinance.woa/wa/inAppTransactionDone
рдФрд░ рд╡рд╣рд╛рдВ рд▓реЗрдирджреЗрди рдЖрдИрдбреА рдФрд░ GUID рдкрд╛рд╕ рдХрд░реЗрдВ:
'transactionId' => '170000030394952', 'guid' => 'xxxxx',
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд╛рдкрд╕ рдЖрдПрдЧрд╛:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>jingleDocType</key><string>inAppSuccess</string> <key>jingleAction</key><string>inAppTransactionDone</string> <key>dsid</key><string>DSID (ID /?)</string> </dict> </plist>
рд╡рд╣ рд╕рдм рд╣реИ! рдЦрд░реАрджрд╛рд░реА рдкреВрд░реА рд╣реЛ рдЧрдИ рд╣реИ, рд╣рд░ рдХреЛрдИ рдЦреБрд╢ рд╣реИред
рдпрджрд┐ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рд╕реЗ рдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рдЦрд░реАрдж рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ,
рддреЛ рд╕реЗрдм рд╕реЗ рд╕реЗрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ , рд▓реЗрдХрд┐рди рдпрд╣ рдКрдкрд░ рдХреА рд╕рднреА рдЪреАрдЬреЛрдВ рдХреЗ рд╕рдорд╛рди рд╣реИред
рдкреБрдирд╢реНрдЪ: рдЕрдкрдирд╛ рд╕рд┐рд░ рджреЗрдЦреЛ!
рд╣реЗрдбрд░ рдФрд░ рдХреБрдХреАрдЬрд╝ рдкрд░ рдирдЬрд╝рд░ рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдпрджрд┐ рдЖрдк рдЕрдЪрд╛рдирдХ рдХреБрдЫ рджреВрд░ рджреЗ рджреЗрддреЗ рд╣реИрдВ, рди рдХрд┐ рдРрдкреНрдкрд▓ рд╡реЗрдм рдСрдмреНрдЬреЗрдХреНрдЯ, рдХреЛрдИ $ _COOKIE ['рдкреЙрдб'] рдирд╣реАрдВ рд╣реИ, рддреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╢рдкрде рдЧреНрд░рд╣рдг рдХрд░реЗрдЧрд╛ рдФрд░ рдЖрдкрдХреЛ рдЖрдЧреЗ рдирд╣реАрдВ рдЬрд╛рдиреЗ рджреЗрдЧрд╛ред
рдЦреИрд░, рд▓реБрдЧрджреА, рдХреЛрдб!
рдЖрдк рдЗрд╕реЗ GitHub рдХреЗ рд╕рд╛рде рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ ред рдпрд╣ рдЯреЗрдврд╝рд╛ рд▓рд┐рдЦрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред + рдЙрд╕реА рд╕реНрдерд╛рди рдкрд░ рдореИрдиреБрдЕрд▓ рд╕реНрдХреИрди рдХрд░реЗрдВред
рдЦреИрд░, рд╕реБрд░рдХреНрд╖рд╛ рд╡рд┐рдХрд▓реНрдк
- рд╕рднреА рдиреБрд╕реНрдЦрд╛ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ, рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ appadamid рдПрдореНрдмреЗрдб рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рднреА рдЬрд╛рдВрдЪреЗрдВ
- рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдФрд░ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рдкрд░ рдЬрд╛рдВрдЪ рдХрд░реЗрдВ (рдирд┐рдпрдорд┐рдд рд╕рддреНрдпрд╛рдкрди рдорджрдж рдирд╣реАрдВ рдХрд░реЗрдЧрд╛)
- рд╕реЗрдм рдХреЛрдб рд╕реЗ VerificationController рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рд╕реЗрд╡рд╛ рдареАрдХ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧреА рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рдорд╛рдгрдкрддреНрд░реЛрдВ рдХреЗ рдмреАрдЪ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд╛ рдХреЛрдб рдХрд╕рдХрд░ Apple рдХреЛрдб рдореЗрдВ рд╕реЗрдЯ рд╣реИ, => рдирдХрд▓реА рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
рдФрд░ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рдмрд╛рдЬрд╛рд░ рдХрдиреЗрдХреНрд╢рди рддреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдЕрдорд╛рдиреНрдп рд╣реИрдВред рдХреМрди рдореЗрд░реА рдорджрдж рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдореБрдЭрд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░реЗрдВ, рдореЗрд░реЗ рдкрд╛рд╕ рдХреБрдЫ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВред