Android アプリ内購入を Android ネイティブ アプリケーションと統合しています。次のコードを使用して、アプリ内購入の意図を開始しました!
Bundle buyIntentBundle = mService.getBuyIntent(3, getPackageName(),”product_sku”, "inapp",”Some Developer Payload”);
PendingIntent pendingIntent = buyIntentBundle.getParcelable("BUY_INTENT");
startIntentSenderForResult(pendingIntent.getIntentSender(),REQUEST_CODE, new Intent(),Integer.valueOf(0), Integer.valueOf(0), Integer.valueOf(0));
上記のコードは、アプリ内購入のためにGoogle Playで動作し、開いています。アプリ内購入の結果を取得するために onActivityResult をオーバーライドしました (以下はコードです)
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1001) {
if (resultCode == RESULT_OK) {
try {
final JSONObject jo = new JSONObject(purchaseData);
String orderId = jo.getString("orderId");
String productId = jo.getString("productId");
String state = String.valueOf(jo.getInt("purchaseState"));
//POST purchase result to my server for my record!
//Finally Consume the product
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}
以下は、InApp 購入から受け取った応答です。
'{
"orderId":"12999763169054705758.1371079406387615",
"packageName":"com.example.app",
"productId":"exampleSku",
"purchaseTime":1345678900000,
"purchaseState":0,
"developerPayload":"bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ",
"purchaseToken":"rojeslcdyyiapnqcynkjyyjh"
}'
私の質問は、"purchaseState" (JSON の整数値) に "purchased"、"canceled"、"refunded" の 3 つの値しかないため、アプリ内購入トランザクションが "Pending" ステータスであることを識別する方法です。
私はインド出身で、Google ウォレットはアプリ内購入が完了するとすぐに取引を受け入れます。
常に最初は保留中の状態であり、取引の承認または拒否には最大 48 時間かかります。
Google waltet での支払いが成功した後にのみ、顧客がアプリ内購入製品を使用できるようにしたいと考えています。
私の顧客が私のアプリケーションからアプリ内製品を購入しましたが、どういうわけか彼らのデータがサーバーに投稿されていないことに直面しました。お客様から、その購入取引は最初は保留中の状態で、2 日後に完了したとのことでした。マーチャント アカウントでその支払いを受け取ったにもかかわらず、Android が onActivityResult の resultCode == RESULT_OK に応答していないと結論付けました。
誰かが同じ問題に直面した場合は、保留中のステータスを処理するための解決策またはフローを説明してください! 保留中のステータスには APN を使用する必要がありますか? しかし、保留中の注文の詳細をサーバーに保存する必要があります。前もって感謝します!