Aşağıda dikkate alınması gereken bazı önemli kullanım alanlarının yanı sıra nakit ödeme şeklinizi uygulamak için gereken yönergeler ve API'ler yer almaktadır.
Kullanım alanları
Reference Number API'nin kullanıldığı çeşitli durumlar vardır. Bu kılavuzda iki kullanım alanı ele alınacak ve bunların uygulanmasında size yol gösterilecektir.
- Nakit: Kullanıcı, fiziksel bir konumda nakit olarak ödeme yapar.
- VAN: Kullanıcı, bir Sanal Hesap Numarasına para aktarır.
Nakit
Kullanıcı, Google'dan ürün satın almak için fiziksel bir konumda (ör. market) nakit ödeme yapabilir. Kullanıcı, işlemi tanımlamak için mağazaya gidip ödeme yapabileceği bir referans numarası oluşturur. Buna ek olarak Google, kullanıcıya satın alma işleminin nasıl tamamlanacağıyla ilgili talimatlar gösterir. İdeal olarak, kullanıcı satın alma işlemini tamamlar tamamlamaz entegrasyon uzmanı, Google'ın ürünü teslim edebilmesi için Google'ı bilgilendirir.
Google'daki irtibat kişiniz, sizden genel ödeme talimatlarınızın bir örneğini ister. Mesajı optimize etmek ve hassaslaştırmak için Google temsilcinizle birlikte çalışırsınız.
Google'ın sağlamak istediği kullanıcı deneyimi, müşteri siparişinin mağazadan ayrılırken teslim edilmesidir. Google, müşterinin referans numarasını ödemesinden sonra üç dakika içinde Google'a ReferenceNumberPaidNotification bilgisi gönderilmesini bekler. ReferenceNumberÜcretliBildirim gönderildikten sonra işlem, entegrasyon entegratör tarafından geri alınamaz.
VAN (Sanal Hesap Numarası)
Bir kullanıcı, banka hesabıyla para ödemesi yapabilir. Google, bu numarayı ve talimatları kullanıcıya sunarak entegratörden bir Sanal Hesap Numarası ister. Kullanıcı, bu numarayı kopyalar ve aktarılacak tutara ek olarak bankacılık uygulamasına girer.
Entegratörün, aktarılan tutarın ReferenceNumberGeneration istek tutarıyla eşleştiğini doğrulaması, ardından referans numarası için ödeme yapıldığını Google'a bildirmesi gerekir.
Google, ReferenceNumberPaidNotification bilgisini aldıktan sonra ürünü teslim eder. İşlem entegrasyon uzmanı tarafından geri alınamaz.
Sunucularınız ile Google'ın sunucuları arasında ileti gönderme
Sunucularınız ile Google'ın sunucuları arasında (veya tam tersi) ileti gönderirken lütfen bu işlemi bu yönergelere uygun şekilde yapın.
Gelen istek - DecryptWithVendorPrivateKey(Base64UrlDecode(request))
Giden yanıt - Base64UrlEncode(EncryptWithGooglePublicKey(request))
Google isteği - Base64UrlEncode(EncryptWithGooglePublicKey(request))
Google yanıtı - DecryptWithVendorPrivateKey(Base64UrlDecode(request))
İstek ve yanıtların işlenmesini gösteren bir PGP kitaplığı ve java'daki örnek burada verilmiştir.
İdemli davranışı izleyin
Aciliyet, başarıyla işlenmiş olan herhangi bir isteği (ödeme gibi) yeniden işlemeyi denememeniz gerektiği anlamına gelir. Bunun yerine, başarılı işleme yanıtı raporlanmalıdır.
Neden önemlidir?
Google, bizim tarafımızdaki eyaletin tedarikçi tarafındaki durumla aynı olduğundan emin olmak için bazı istekleri tekrar deneyebilir. Sisteminizin bunun başka bir işlem olduğunu düşünmemesi gerekir. Bu nedenle aciliyet, çok önemlidir. Bu, bir entegrasyon uzmanının daha önce başarıyla işlenmiş bir şeyi yeniden işlememesi gerektiği anlamına gelir. Böyle bir durumda, önceki yanıt gönderilmelidir.
Idempotency nasıl uygulanır?
Google bir yeniden deneme gönderirse istek kimliği aynı olur, içerik de aynı olur, ancak zaman damgası farklı olur. Daha önce gönderdiğiniz yanıtı aynı şekilde yanıtlayın. İlk yanıtınız 200 (Başarılı) ise Google, aynı yanıtı farklı bir zaman damgasıyla bekleyecektir.
Önceki yanıtınız hata ise (400 veya 500 vb.) bu isteği yeni bir istek olarak işlemeli ve tekrar kontrol etmelisiniz. Sunucunuz ilk kez kapalıysa ve yeniden denerseniz isteğin başarıyla işlenmesi için bir şans daha vermiş olursunuz.
Daha fazla bilgi edinmek için bu ayrıntılı kılavuza göz atın.
Ödeme Entegratör Hesap Kimliği'ni (PIAID) kullanma
Google ile entegrasyonlar, Google'ın farklı ticari kuruluşlarıyla entegrasyon gerektirebilir. Örneğin, Google Play bir tüzel kişi, başka bir varlık YouTube, diğeri ise Google Ads'dir. Bunlarda, bu yapılandırmaların her birini temsil eden farklı satıcı hesapları yer alır.
Google, Google'daki her tüzel kişinin her satıcı hesabıyla eşleme işlemi için Google, Ödeme Entegratörü Hesap Kimlikleri (PIAID'ler) sağlar. Nakit FOP API'sinin bir örneği için generateReferenceNumber bölümüne göz atın. Aşağıda, bu eşlemenin kullanıldığı bir örnek verilmiştir.
Google, Google'daki her tüzel kişinin her satıcı hesabıyla eşleme işlemi için Google, Ödeme Entegratörü Hesap Kimlikleri (PIAID'ler) sağlar. Nakit FOP API'sinin kullanıldığı bir örnek için generateReferenceNumber bölümüne bakın. Aşağıda, bu eşlemenin kullanıldığı bir örnek verilmiştir.
{
"requestHeader": {
"protocolVersion": {
"major": 1,
"minor": 0,
"revision": 0
},
"requestId": "bWVyY2hhbnQgdHJhbnNhY3Rpb24gaWQ",
"requestTimestamp": "1502220196077"
},
"paymentIntegratorAccountId": "InvisiCashUSA_USD",
"transactionDescription": "Google - Music",
"currencyCode": "USD",
"amount": "2000000"
}
Vurgulanan bölüme dikkat edin. Burada gereken iki değer, Google'daki irtibat kişiniz ve satıcı hesabınız tarafından sağlanan paymentIntegratorAccountId
değeridir.
Entegratörün, hizmet verilen her ülkeye göre farklı hesapları da olabilir. Bunun nedeni, çeşitli vergi yasaları ve ülkeler arasındaki diğer farklılıklar olabilir. Bu durumda, her ülke için başka bir PIAID oluşturulabilir.
Entegre edilecek API'ler
Aşağıdaki API'ler referans numarası oluşturma ve ödeme bildirimlerini işler.
Havale ve ödeme işlemlerini aşağıdaki API'ler yönetir.
- RemittanceStatementNotification
- RemittanceStatementDetails
- AcceptRemittanceStatement/acceptRemittanceStatement (değişikliklerle birlikte)
Referans numaraları oluşturmak ve Google ile anlaşmak için yukarıdaki API'lerin tümünü entegre etmeniz gerekir.
Referans numarası oluştur
Bir satın alma işlemi başlattığınızda Google, GenerateReferenceNumber numaralı telefonu arar. İşlemi veya hesabı tanımlayan bir referans numarasıyla yanıt vermeniz beklenir. Beklenen gecikme: < 3 saniye.
Nakit işlemler için referans numarası en fazla 12 karakter uzunluğunda olabilir.
URL: POST https://[your basepath]/v1/generateReferenceNumber
JSON isteğinde bulun
{
"requestHeader": {
"protocolVersion": {
"major": 1,
"minor": 0,
"revision": 0
},
"requestId": "cf9fde73-3735-4463-8e6e-c999fda35af6",
"requestTimestamp": "1561678470395"
},
"paymentIntegratorAccountId": "Sample_Cash_Vendor_282",
"transactionDescription": "Google Play - Tester",
"currencyCode": "USD",
"amount": "10000000"
}
Yanıt JSON
{
"responseHeader": {
"responseTimestamp": "1561678947659"
},
"result": "SUCCESS",
"referenceNumber": "38a41c05-ba7b-4040-a909-4331d0b9ce46"
}
Örnek Java
`String generateReferenceNumberJson = Utils.decryptAndDecode(encodedEncryptedGenerateReferenceNumberRequest);`
GenerateReferenceNumberRequest request = gson.fromJson(generateReferenceNumberJson, GenerateReferenceNumberRequest.class);
Referans numarasını iptal et
Google, bir referans numarasını iptal etmeyi ve kullanıcının bu referansa ödeme yapmasını engellemeyi tercih edebilir. Süresi dolan bir promosyonu örnek olarak kullanabilirsiniz. Bu isteği başarıyla yanıtladığınızda, referans numarasının ödenemediğinden emin olmanız gerekir.
Kullanıcı ödeme işlemini zaten başlattıysa (örneğin, satış noktasından bir referans numarası arama işlemi), sunucunuz istek gövdesinde bir HTTP 423 yanıtı ve ErrorResponse ile USER_ACTION_IN_PROGRESS durumuyla yanıt vermelidir.
URL: POST https://[your basepath]/v1/cancelReferenceNumber
JSON isteğinde bulun
{
"requestHeader": {
"protocolVersion": {
"major": 1,
"minor": 0,
"revision": 0
},
"requestId": "51e00f16-36ba-4490-b228-0a670d202206",
"requestTimestamp": "1561678947926"
},
"paymentIntegratorAccountId": "Sample_Cash_Vendor_282",
"referenceNumber": "38a41c05-ba7b-4040-a909-4331d0b9ce46"
}
Yanıt JSON
{
"responseHeader": {
"responseTimestamp": "1561680406459"
},
"result": "SUCCESS"
}
referenceNumberPaidNotification
Ödeme kabul edildikten ve işlem tamamlandıktan sonra, hizmetinizin işlemin tamamlandığına dair Google'ı bilgilendirmesi ve ürünü kullanıcıya teslim etmesi gerekir. Bu bildirim Google'a ulaştıktan sonra Google, işlemin tamamlanmış olmasını ve ayırtılamaz durumda olmasını bekler.
referenceNumberPaidNotification uç nokta URL'si:
POST https://billpaynotification.googleapis.com/secure-serving/gsp/v1/referenceNumberPaidNotification/[PIAID]
JSON isteğinde bulun
{
"requestHeader": {
"requestTimestamp": "1561748625577",
"requestId": "ae8e310a-92de-436a-a32c-0bd753ae4e4b",
"protocolVersion": {
"major": 1,
"minor": 0,
"revision": 0
}
},
"paymentIntegratorTransactionId": "cf9fde73-3735-4463-8e6e-c999fda35af6",
"referenceNumber": "e4e15b5d-8154-4068-b6eb-560e2a65ac48",
"paymentLocation": {
"brandName": "TestMart",
"locationId": "1234"
},
"paymentIntegratorAccountId": "Sample_Cash_Vendor_282",
"paymentTimestamp": "1561748625577"
}
Yanıt JSON
{
"responseHeader": {
"responseTimestamp": "1561748642600"
},
"result": "SUCCESS"
}
Havale işlemlerini uygulama
Belirli bir FOP için API'leri entegre ettikten sonra havale yapmaya hazırsınız demektir. Havale, tüm ödeme şekillerinde aynı şekilde çalışır.
remittanceStatementNotification
Google, bir işlemden iki gün sonra, o gün kaydettiği işlemlerin özetini içeren bir remittanceStatementNotification gönderir. Bir işlemden iki gün sonra örnek bir bildirim şu şekilde görünür:
POST https://www.integratordomain.com/v1/remittanceStatementNotification
JSON isteği
{
"requestHeader": {
"protocolVersion": {
"major": 1,
"minor": 0,
"revision": 0
},
"requestId": "0123434-statement-abc",
"requestTimestamp": "1502632800000"
},
"paymentIntegratorAccountId": "InvisiCashUSA_USD",
"remittanceStatementSummary": {
"statementDate": "1502607600000",
"billingPeriod": {
"startDate": "1502434800000",
"endDate": "1502521199000",
},
"dateDue": "1503212400000",
"currencyCode": "INR",
"totalDueByIntegrator": "1076000000",
}
}
totalDueByIntegrator
eşlemesine dikkat edin. Bu satırda, entegratörün ödemesi gereken net tutarı (mikro cinsinden) görebilirsiniz. Ayrıca bu mesajda tarih ve para birimi türü de gösterilir. Faturalandırma dönemi, sırasıyla en erken ve en son işlem gününün 00:00:00.000 ve 23:59:59.999 saatlerini temsil eder.
Mutabakat (remittanceStatementDetails
)
Entegratör, mutabakat için remittanceStatementNotification etkinliğine dahil edilen etkinliklerin listesini almak üzere remittanceStatementDetails etkinliğini çağırır.
Google, remittanceStatementDetails
isteğine sayfalara ayrılmış bir etkinlik listesi ile yanıt verir. Toplam işlem sayısı 1.000'den fazlaysa remittanceStatementDetails
birden fazla kez çağrılmalıdır. İsteklerin sırayla yapılması gerekmez ve paralelleştirilebilir.
İstek URL'si
POST https://billpaynotification.googleapis.com/secure-serving/gsp/v1/remittanceStatementDetails
Örnek istek içeriği
{
"requestHeader": {
"protocolVersion": {
"major": 1,
"minor": 0,
"revision": 0
},
"requestId": "statement_detail_request_139932019",
"requestTimestamp": "1502551332087"
},
"paymentIntegratorAccountId": "InvisiCashUSA_USD",
"statementId": "0123434-statement-abc",
"numberOfEvents": 4
}
Burada, daha büyük bir yanıtın, iki yakalama etkinliğini (işlemleri) açıklayan kısa bir snippet'i verilmiştir.
"captureEvents": [ {
{
"eventRequestId": "bWVyY2hhbnQgdHJhbnNhY3Rpb24gaWQ",
"paymentIntegratorEventId": "ioj32SOIjf23oijSDfoij",
"eventCharge": "700000000",
"eventFee": "-28000000"
},
{
"eventRequestId": "Ggghvh78200PQ3Yrpb",
"paymentIntegratorEventId": "iasdf23dSdfijSDfoij",
"eventCharge": "800000000",
"eventFee": "-32000000"
}
}
Daha fazla bilgi için remittanceStatementDetails
sayfasına bakın.
acceptRemittanceStatement
ve acceptRemittanceStatementWithModifications
Entegratörler bu etkinlikleri kaydettikleri etkinliklerle karşılaştırmalıdır. Herhangi bir işlem eşleşmezse veya eksik işlemler varsa daha ayrıntılı inceleme için Google ile iletişime geçin. Tüm işlemler eşleşiyorsa ve işlem ücretine vergiler dahil değilse acceptRemittanceStatement
numaralı telefonu arayın. Vergiler dahilse acceptRemittanceStatementWithModifications
numaralı telefonu arayın.
Ücretlerde vergi olmadığında acceptRemittanceStatement
yöntemi kullanılır.
Vergi eklenecekse acceptRemittanceStatementWithModifications
işlevini çağırın ve vergi oranını tanımlayın. Vergi oranınız değişirse bu bilgiyi güncellediğinizden emin olun. acceptRemittanceStatement
işlemi başarıyla tamamlandıktan sonra, Google hesabına banka havalenizi başlatın.
acceptRemittanceStatement
için istek URL'si
POST https://billpaynotification.googleapis.com/secure-serving/gsp/v1/acceptRemittanceStatement
Örnek istek içeriği
{
"requestHeader": {
"protocolVersion": {
"major": 1,
"minor": 0,
"revision": 0
},
"requestId": "0123434-abc",
"requestTimestamp": "1502545413098"
},
"paymentIntegratorAccountId": "InvisiCashUSA_USD",
"statementId": "0123434-statement-abc"
}
Örnek yanıt
{
"responseHeader": {
"responseTimestamp": "1519996752221"
}
"acceptRemittanceStatementResultCode": "SUCCESS"
}
acceptRemittanceStatementWithModifications
için istek URL'si
POST https://billpaynotification.googleapis.com/secure-serving/gsp/v1/acceptRemittanceStatementWithModifications
Örnek istek gövdesi
{
"requestHeader": {
"protocolVersion": {
"major": 1,
"minor": 0,
"revision": 0
},
"requestId": "0123434-abc",
"requestTimestamp": "1502545413098"
},
"paymentIntegratorAccountId": "InvisiCashUSA_USD",
"statementId": "0123434-statement-abc"
"feeToVatModification": {
"vatToFeeRatioInMicros": "150000"
}
}
Örnek yanıt
{
"responseHeader": {
"responseTimestamp": "1519996752221"
}
"acceptRemittanceStatementWithModificationsResultCode": "SUCCESS"
}