解决方案

Apple 内购IAP

seo靠我 2023-09-26 04:26:45

1:客户端传tradeid(商品ID)来服务器下单,下单成功之后服务器告诉客户端下单成功了,

2:客户端拉起支付是需要productid(com.kx880.XXXXXXXXX)

支付成功之后 会收到票据SEO靠我,客户端把票据发给服务器,服务器再去苹果校验

客户端是用的unity的插件收到的格式如下

{"Payload":"MIITzAYJKoZIhvcNAQcCoIITvTCCE7kCAQExCzAJBgUrDSEO靠我gMCGgUAMIIDbQYJKoZIhvcNAQcBoIIDXgSCA1oxggNWMAoCAQgCAQEEAhYAMAoCARQCAQEEAgwAMAsCAQECAQEEAwIBADALAgEDASEO靠我gEBBAMMATAwCwIBCwIBAQQDAgEAMAsCAQ8CAQEEAwIBADALAgEQAgEBBAMCAQAwCwIBGQIBAQQDAgEDMAwCAQoCAQEEBBYCNCswDSEO靠我AIBDgIBAQQEAgIBADANAgENAgEBBAUCAwJL5DANAgETAgEBBAUMAzEuMDAOAgEJAgEBBAYCBFAyNTYwGAIBBAIBAgQQ94t344Hu2SEO靠我4HsrN88PqM14zAbAgEAAgEBBBMMEVByb2R1Y3Rpb25TYW5kYm94MBwCAQUCAQEEFHAjinqZqIVoPrExa+MxGeT7kOoeMB4CAQwCASEO靠我QEEFhYUMjAyMi0wNi0xNlQwODoxOTo0NFowHgIBEgIBAQQWFhQyMDEzLTA4LTAxVDA3OjAwOjAwWjAfAgECAgEBBBcMFWNvbS5reSEO靠我Dg4MC5kZXZpbGh1bnRlcjA3AgEGAgEBBC9WNtTfw9YoRCk6odHdZ1b2Da0+I+90tRt9J5b7CvDj8b03QT6DFcMuQ91gJ9Q/ZDBBASEO靠我gEHAgEBBDkAZ+GGOynovwU5I8Hhcl40mAiTBjjM08hc/RSX19/D43dB0wmmmySJnfvzkPWvfNqcx4b3LI43caYwggFwAgERAgEBBSEO靠我IIBZjGCAWIwCwICBqwCAQEEAhYAMAsCAgatAgEBBAIMADALAgIGsAIBAQQCFgAwCwICBrICAQEEAgwAMAsCAgazAgEBBAIMADALASEO靠我gIGtAIBAQQCDAAwCwICBrUCAQEEAgwAMAsCAga2AgEBBAIMADAMAgIGpQIBAQQDAgEBMAwCAgarAgEBBAMCAQEwDAICBq4CAQEEASEO靠我wIBADAMAgIGrwIBAQQDAgEAMAwCAgaxAgEBBAMCAQAwDAICBroCAQEEAwIBADAbAgIGpwIBAQQSDBAyMDAwMDAwMDgxMzUzMjg1MSEO靠我BsCAgapAgEBBBIMEDIwMDAwMDAwODEzNTMyODUwHwICBqgCAQEEFhYUMjAyMi0wNi0xNlQwODoxOTo0M1owHwICBqoCAQEEFhYUMSEO靠我jAyMi0wNi0xNlQwODoxOTo0M1owKAICBqYCAQEEHwwdY29tLmt4ODgwLmRldmlsaHVudGVyLjEwMTYxMDGggg5lMIIFfDCCBGSgASEO靠我wIBAgIIDutXh+eeCY0wDQYJKoZIhvcNAQEFBQAwgZYxCzAJBgNVBAYTAlVTMRMwEQYDVQQKDApBcHBsZSBJbmMuMSwwKgYDVQQLDSEO靠我CNBcHBsZSBXb3JsZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9uczFEMEIGA1UEAww7QXBwbGUgV29ybGR3aWRlIERldmVsb3BlciBSZSEO靠我WxhdGlvbnMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTUxMTEzMDIxNTA5WhcNMjMwMjA3MjE0ODQ3WjCBiTE3MDUGA1UEASEO靠我wwuTWFjIEFwcCBTdG9yZSBhbmQgaVR1bmVzIFN0b3JlIFJlY2VpcHQgU2lnbmluZzEsMCoGA1UECwwjQXBwbGUgV29ybGR3aWRlISEO靠我ERldmVsb3BlciBSZWxhdGlvbnMxEzARBgNVBAoMCkFwcGxlIEluYy4xCzAJBgNVBAYTAlVTMIIBIjANBgkqhkiG9w0BAQEFAAOCASEO靠我Q8AMIIBCgKCAQEApc+B/SWigVvWh+0j2jMcjuIjwKXEJss9xp/sSg1Vhv+kAteXyjlUbX1/slQYncQsUnGOZHuCzom6SdYI5bSIcSEO靠我c8/W0YuxsQduAOpWKIEPiF41du30I4SjYNMWypoN5PC8r0exNKhDEpYUqsS4+3dH5gVkDUtwswSyo1IgfdYeFRr6IwxNh9KBgxHVSEO靠我PM3kLiykol9X6SFSuHAnOC6pLuCl2P0K5PB/T5vysH1PKmPUhrAJQp2Dt7+mf7/wmv1W16sc1FJCFaJzEOQzI6BAtCgl7ZcsaFpaSEO靠我YeQEGgmJjm4HRBzsApdxXPQ33Y72C3ZiB7j7AfP4o7Q0/omVYHv4gNJIwIDAQABo4IB1zCCAdMwPwYIKwYBBQUHAQEEMzAxMC8GCSEO靠我CsGAQUFBzABhiNodHRwOi8vb2NzcC5hcHBsZS5jb20vb2NzcDAzLXd3ZHIwNDAdBgNVHQ4EFgQUkaSc/MR2t5+givRN9Y82Xe0rBSEO靠我IUwDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBSIJxcJqbYYYIvs67r2R1nFUlSjtzCCAR4GA1UdIASCARUwggERMIIBDQYKKoZIhSEO靠我vdjZAUGATCB/jCBwwYIKwYBBQUHAgIwgbYMgbNSZWxpYW5jZSBvbiB0aGlzIGNlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBhc3N1bSEO靠我WVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsISEO靠我GNlcnRpZmljYXRlIHBvbGljeSBhbmQgY2VydGlmaWNhdGlvbiBwcmFjdGljZSBzdGF0ZW1lbnRzLjA2BggrBgEFBQcCARYqaHR0cSEO靠我DovL3d3dy5hcHBsZS5jb20vY2VydGlmaWNhdGVhdXRob3JpdHkvMA4GA1UdDwEB/wQEAwIHgDAQBgoqhkiG92NkBgsBBAIFADANBSEO靠我gkqhkiG9w0BAQUFAAOCAQEADaYb0y4941srB25ClmzT6IxDMIJf4FzRjb69D70a/CWS24yFw4BZ3+Pi1y4FFKwN27a4/vw1LnzLrSEO靠我Rdrjn8f5He5sWeVtBNephmGdvhaIJXnY4wPc/zo7cYfrpn4ZUhcoOAoOsAQNy25oAQ5H3O5yAX98t5/GioqbisB/KAgXNnrfSemMSEO靠我/j1mOC+RNuxTGf8bgpPyeIGqNKX86eOa1GiWoR1ZdEWBGLjwV/1CKnPaNmSAMnBjLP4jQBkulhgwHyvj3XKablbKtYdaG6YQvVMpSEO靠我zcZm8w7HHoZQ/Ojbb9IYAYMNpIr7N4YtRHaLSPQjvygaZwXG56AezlHRTBhL8cTqDCCBCIwggMKoAMCAQICCAHevMQ5baAQMA0GCSEO靠我SqGSIb3DQEBBQUAMGIxCzAJBgNVBAYTAlVTMRMwEQYDVQQKEwpBcHBsZSBJbmMuMSYwJAYDVQQLEx1BcHBsZSBDZXJ0aWZpY2F0aSEO靠我W9uIEF1dGhvcml0eTEWMBQGA1UEAxMNQXBwbGUgUm9vdCBDQTAeFw0xMzAyMDcyMTQ4NDdaFw0yMzAyMDcyMTQ4NDdaMIGWMQswCSEO靠我QYDVQQGEwJVUzETMBEGA1UECgwKQXBwbGUgSW5jLjEsMCoGA1UECwwjQXBwbGUgV29ybGR3aWRlIERldmVsb3BlciBSZWxhdGlvbSEO靠我nMxRDBCBgNVBAMMO0FwcGxlIFdvcmxkd2lkZSBEZXZlbG9wZXIgUmVsYXRpb25zIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBISEO靠我jANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyjhUpstWqsgkOUjpjO7sX7h/JpG8NFN6znxjgGF3ZF6lByO2Of5QLRVWWHAtfSEO靠我sRuwUqFPi/w3oQaoVfJr3sY/2r6FRJJFQgZrKrbKjLtlmNoUhU9jIrsv2sYleADrAF9lwVnzg6FlTdq7Qm2rmfNUWSfxlzRvFduZSEO靠我zWAdjakh4FuOI/YKxVOeyXYWr9Og8GN0pPVGnG1YJydM05V+RJYDIa4Fg3B5XdFjVBIuist5JSF4ejEncZopbCj/Gd+cLoCWUt3QSEO靠我pE5ufXN4UzvwDtIjKblIV39amq7pxY1YNLmrfNGKcnow4vpecBqYWcVsvD95Wi8Yl9uz5nd7xtj/pJlqwIDAQABo4GmMIGjMB0GASEO靠我1UdDgQWBBSIJxcJqbYYYIvs67r2R1nFUlSjtzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFCvQaUeUdgn+9GuNLkCm90dNfSEO靠我wheMC4GA1UdHwQnMCUwI6AhoB+GHWh0dHA6Ly9jcmwuYXBwbGUuY29tL3Jvb3QuY3JsMA4GA1UdDwEB/wQEAwIBhjAQBgoqhkiG9SEO靠我2NkBgIBBAIFADANBgkqhkiG9w0BAQUFAAOCAQEAT8/vWb4s9bJsL4/uE4cy6AU1qG6LfclpDLnZF7x3LNRn4v2abTpZXN+DAb2yrSEO靠我iphcrGvzcNFMI+jgw3OHUe08ZOKo3SbpMOYcoc7Pq9FC5JUuTK7kBhTawpOELbZHVBsIYAKiU5XjGtbPD2m/d73DSMdC0omhz+6kSEO靠我ZJMpBkSGW1X9XpYh3toiuSGjErr4kkUqqXdVQCprrtLMK7hoLG8KYDmCXflvjSiAcp/3OIK5ju4u+y6YpXzBWNBgs0POx1MlaTbqSEO靠我/nJlelP5E3nJpmB6bz5tCnSAXpm4S6M9iGKxfh44YGuv9OQnamt86/9OBqWZzAcUaVc7HGKgrRsDwwVHzCCBLswggOjoAMCAQICASEO靠我QIwDQYJKoZIhvcNAQEFBQAwYjELMAkGA1UEBhMCVVMxEzARBgNVBAoTCkFwcGxlIEluYy4xJjAkBgNVBAsTHUFwcGxlIENlcnRpZSEO靠我mljYXRpb24gQXV0aG9yaXR5MRYwFAYDVQQDEw1BcHBsZSBSb290IENBMB4XDTA2MDQyNTIxNDAzNloXDTM1MDIwOTIxNDAzNlowYSEO靠我jELMAkGA1UEBhMCVVMxEzARBgNVBAoTCkFwcGxlIEluYy4xJjAkBgNVBAsTHUFwcGxlIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSEO靠我RYwFAYDVQQDEw1BcHBsZSBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5JGpCR+R2x5HUOsF7V55hC3rNSEO靠我qJXTFXsixmJ3vlLbPUHqyIwAugYPvhQCdN/QaiY+dHKZpwkaxHQo7vkGyrDH5WeegykR4tb1BY3M8vED03OFGnRyRly9V0O1X9fmSEO靠我/IlA7pVj01dDfFkNSMVSxVZHbOU9/acns9QusFYUGePCLQg98usLCBvcLY/ATCMt0PPD5098ytJKBrI/s61uQ7ZXhzWyz21Oq30DSEO靠我w4AkguxIRYudNU8DdtiFqujcZJHU1XBry9Bs/j743DN5qNMRX4fTGtQlkGJxHRiCxCDQYczioGxMFjsWgQyjGizjx3eZXP/Z15lvSEO靠我EnYdp8zFGWhd5TJLQIDAQABo4IBejCCAXYwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFCvQaUeUdSEO靠我gn+9GuNLkCm90dNfwheMB8GA1UdIwQYMBaAFCvQaUeUdgn+9GuNLkCm90dNfwheMIIBEQYDVR0gBIIBCDCCAQQwggEABgkqhkiG9SEO靠我2NkBQEwgfIwKgYIKwYBBQUHAgEWHmh0dHBzOi8vd3d3LmFwcGxlLmNvbS9hcHBsZWNhLzCBwwYIKwYBBQUHAgIwgbYagbNSZWxpYSEO靠我W5jZSBvbiB0aGlzIGNlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYSEO靠我WJsZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRlIHBvbGljeSBhbmQgY2VydGlmaWNhdSEO靠我GlvbiBwcmFjdGljZSBzdGF0ZW1lbnRzLjANBgkqhkiG9w0BAQUFAAOCAQEAXDaZTC14t+2Mm9zzd5vydtJ3ME/BH4WDhRuZPUc38SEO靠我qmbQI4s1LGQEti+9HOb7tJkD8t5TzTYoj75eP9ryAfsfTmDi1Mg0zjEsb+aTwpr/yv8WacFCXwXQFYRHnTTt4sjO0ej1W8k4uvRtSEO靠我3DfD0XhJ8rxbXjt57UXF6jcfiI1yiXV2Q/Wa9SiJCMR96Gsj3OBYMYbWwkvkrL4REjwYDieFfU9JmcgijNq9w2Cz97roy/5U2pbZSEO靠我MBjM3f3OgcsVuvaDyEO2rpzGU+12TZ/wYdV2aeZuTJC+9jVcZ5+oVK3G72TQiQSKscPHbZNnF5jyEuAF1CqitXa5PzQCQc3sHV1ISEO靠我TGCAcswggHHAgEBMIGjMIGWMQswCQYDVQQGEwJVUzETMBEGA1UECgwKQXBwbGUgSW5jLjEsMCoGA1UECwwjQXBwbGUgV29ybGR3aSEO靠我WRlIERldmVsb3BlciBSZWxhdGlvbnMxRDBCBgNVBAMMO0FwcGxlIFdvcmxkd2lkZSBEZXZlbG9wZXIgUmVsYXRpb25zIENlcnRpZSEO靠我mljYXRpb24gQXV0aG9yaXR5AggO61eH554JjTAJBgUrDgMCGgUAMA0GCSqGSIb3DQEBAQUABIIBAIEe4KhWSNGKs8yGgLf8L4tZHSEO靠我c2kL7ddA9OxrYUftgAqZdGDry+GM0fhSbwbaJoirD3aZMy5Z37z8T65MU+iGvJ0MVXhHH5aOeAnm9ALTcZX5v8q4s1aiBF3WIt3FSEO靠我dTjLzfIOX7jh2OEJrKuItvPVCbeoU/ix41WK7h7of602noLEWR+S+1QLhdEy3NC2VeUwwYHJcvOIebVG7opa3GbOY369En97mwf+SEO靠我lbUqWtMl8tP/KbByiTQnu5BoH2oqU0MOSurEDeDGu7dOEIeksMnucRpg/CfLJ5bAf7e+paqFIStT/x07nC0OlBQM3avL43mWcTpxSEO靠我lKtl6SJ88TL5mzwSik=","Store":"AppleAppStore","TransactionID":"2000000081353285"}

这个Payload就是已经base64之SEO靠我后的结果,这个发给服务器 服务器去校验就好了

transid 是com.kx880.devilhunter.101XXXXX

def verifyReceipt(self,uid,orderid,tranSEO靠我sid,receiptStr,sandbox = 0,password = None):logging.debug("uid=%s verifyReceipt orderid=%s transid=%SEO靠我s sandbox=%s",uid,orderid,transid,sandbox)url = self.buy_url if sandbox == 0 else self.sandbox_url# SEO靠我receiptBase64 = base64.standard_b64encode(receiptStr)receiptBase64 = receiptStrjsonReceipt = json.duSEO靠我mps({"receipt-data" : receiptBase64,"password":password}) if password else json.dumps({"receipt-dataSEO靠我" : receiptBase64})agent = Agent(reactor, connectTimeout = 10)d = agent.request(method = bPOST,uri =SEO靠我 url,headers = Headers({Content-type:["application/json"]}),bodyProducer = StringProducer(jsonReceipSEO靠我t.encode(self.encoding)))d.addCallback(self.cbRequest, jsonReceipt)d.addErrback(self.cbError, jsonReSEO靠我ceipt) AppleIapGate cbBody body:{ustatus: 21002} AppleIapGate cbBody body:{uenvironmSEO靠我ent: uSandbox, ustatus: 0, ureceipt: {udownload_id: 0, uadam_id: 0, urequest_date: u2022-06-16 08:36SEO靠我:37 Etc/GMT, uapp_item_id: 0, uoriginal_purchase_date_pst: u2013-08-01 00:00:00 America/Los_Angeles,SEO靠我 uversion_external_identifier: 0, ureceipt_creation_date: u2022-06-16 08:36:30 Etc/GMT, uin_app: [{uSEO靠我is_trial_period: ufalse, upurchase_date_pst: u2022-06-16 01:36:30 America/Los_Angeles, uproduct_id: SEO靠我ucom.kx880.devilhunter.1016101, uoriginal_transaction_id: u2000000081374113, uoriginal_purchase_dateSEO靠我_pst: u2022-06-16 01:36:30 America/Los_Angeles, uin_app_ownership_type: uPURCHASED, uoriginal_purchaSEO靠我se_date: u2022-06-16 08:36:30 Etc/GMT, uoriginal_purchase_date_ms: u1655368590000, upurchase_date: uSEO靠我2022-06-16 08:36:30 Etc/GMT, upurchase_date_ms: u1655368590000, utransaction_id: u2000000081374113, SEO靠我uquantity: u1}], uoriginal_purchase_date_ms: u1375340400000, uoriginal_application_version: u1.0, uoSEO靠我riginal_purchase_date: u2013-08-01 07:00:00 Etc/GMT, urequest_date_ms: u1655368597680, ubundle_id: uSEO靠我com.kx880.devilhunter, ureceipt_creation_date_pst: u2022-06-16 01:36:30 America/Los_Angeles, uapplicSEO靠我ation_version: u0, urequest_date_pst: u2022-06-16 01:36:37 America/Los_Angeles, ureceipt_creation_daSEO靠我te_ms: u1655368590000, ureceipt_type: uProductionSandbox}}

 根据返回结果中status判断是否成功

* 0 验单成功* 21000 App StoSEO靠我re不能读取你提供的JSON对象* 21002 receipt-data域的数据有问题* 21003 receipt无法通过验证* 21004 提供的shared secret不匹配你账号中的sharSEO靠我ed secret* 21005 receipt服务器当前不可用* 21006 receipt合法,但是订阅已过期。服务器接收到这个状态码时,receipt数据仍然会解码并一起发送* 21007 reSEO靠我ceipt是Sandbox receipt,但却发送至生产系统的验证服务* 21008 receipt是生产receipt,但却发送至Sandbox环境的验证服务

客户端需要 transaction_iSEO靠我d 去appstore消单,服务器也要记录这个数据,防止客户端重复校验。。。

“SEO靠我”的新闻页面文章、图片、音频、视频等稿件均为自媒体人、第三方机构发布或转载。如稿件涉及版权等问题,请与 我们联系删除或处理,客服邮箱:html5sh@163.com,稿件内容仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同 其观点或证实其内容的真实性。

网站备案号:浙ICP备17034767号-2