دوستان این مشکل یک راه حل خیلی ساده دارد
اگر با یک دیباگر جواب برگشتی lucky pathcer رو بعد از خرید چک می کردید و اون رو با جواب برگشتی بازار مقایسه می کردید راه حل میومد جلوی چشماتون.
به لطف عدم وجود کیف پول برای مارکت های ایرانی ( مثل Google wallet ) مقدار orderId در مارکت های ایرانی وجود ندارد و به جای آن Token قرار گرفته است.
حالا شما خیلی راحت می تونید مقدار orderId و توکن رو با هم مقایسه کنید، اگر مساوی بودن جواب برگشتی از بازار اومده و خرید انجام شده، ولی اگر برابر نبودند یعنی جواب رو lucky patcher فرستاده. ( نحوه استفاده پیوست شد )
اگر نرم افزارتون رو منتشر کردید از روش استفاده کنید و یک آپدیت جدید بدید ولی اگر تازه می خواهید نرم افزارتون رو منتشر کنید پیشنهاد میشه حتما راه حل ایمن تری اجرا کنید.
بهترین روش اینه که شما از API ـه توسعه دهنده بازار استفاده کنید چون خرید هایی که تو بازار ثبت شده رو می تونید بررسی کنید. ( من از این روش فعلا استفاده نکردم ولی یکی از دوستان آموزشش رو گذاشته تو این تاپیک)
یک روش دیگه هم هست که میتونید کلا تابع verifyPurchase که تو کلاس IabHelper هست رو تو سرور خودتون اجرا کنید و public key رو که فقط برای این تابع استفاده میشه در نرم افزار نذارید و امضای بازار رو تو سرور بررسی کنید.
نحوه عملکردش هم فکر می کنم به این صورته که بازار همون Json برگشتی خرید رو میاد با public key انکود می کنه و میفرسته برای شما، تو تابع verifyPurchase این جواب انکود شده توسط public key دیکود میشه و با جواب برگشتی مقایسه میشه، اگه برابر بودن یعنی درسته، حالا شما باید این جواب انکود شده ( همون signature در جواب برگشتی بازار ) رو به سرور خودتون بفرستید و توسط public key خودتون دیکودش کنید و در جواب بفرستید برای نرم افزار تا با جواب برگشتی از بازار مقایسش کنه. ( تو خیلی از سایت های خارجی این روش کامل توضیح داده شده و کدهاش هست، سرچ بزنید میاد )