美文网首页
iOS内购问题

iOS内购问题

作者: 野咪咕 | 来源:发表于2019-12-13 16:27 被阅读0次

    本人项目是早教类项目,用到了内购的功能,记录一下,用到的是 非续订订阅 类型的内购。

    注意:1,审核的通过,需要在客户端或者server进行双重验证,不然迭代版本的时候会被拒。2,你还要上传内购的具体位置在APP审核信息的附件里面,即便你上传了,审核人员还是找不到还是被拒,那么你只能回复他的邮件,需要注意的是回复邮件上传的附件的文件不能包含中文,如果你的文件包含了中文就一直提示服务器错误,上传不上去。

    验证操作让后台去验证,因为客户端毕竟没后台验证的好,防止别人刷单,为什么要做product_id商品id,bundle_id包名,transaction_id订单号,因为 客户端传递过来的 凭证,是不可信的,有可能是别人篡改后的结果。比如,他们有个自己的内购,我们把这个凭证发到苹果是可以拿到返回结果的,但是 product_id,bundle_id没办法一样。    

    "transaction_id": "1000000460004095" 一定要进行去重验证,一个订单号只能加一次款

    "bundle_id": "com.rtjk.xshl" 当前的产品的包名,一定要验证返回的包名和此包名要一致

    "product_id": "6hongliao" 对应商品品id,自己做一个金额的映射就行,对应到具体的金额,建议命名要规则

    为保证审核的通过,需要在客户端或者server进行双重验证,即,先以线上交易验证地址进行验证,如果苹果正式验证服务器的返回验证码code为21007,则再一次连接沙盒测试服务器进行验证即可。在应用提审时,苹果IAP提审验证时是在沙盒环境的进行的,即:苹果在审核App时,只会在sandbox环境购买,其产生的购买凭证,也只能连接苹果的测试验证服务器,如果没有做双验证,需要特别注意此问题,否则会被拒。

    苹果人员审核的时候,是用的沙箱环境,但是如果你是迭代版本,苹果审核的时候会查看你是否进行认证没有,如果没有认证会被拒。

    基本上所有的 操作都可以再前端完成操作,包括对支付凭证的验证,但是如果在客户端验证凭证可能存在被篡改的危险,

    服务器去重验证和加款,是建立在 用户已经在前端支付成功,然后由ios会得到一个字节流,然后 base64后转给 后台。

    后台通过这个字符串 去请求苹果的服务器,然后得到一个json字符串去给用户加款,其中注意事项为

    //沙箱static final String testUrl = "https://sandbox.itunes.apple.com/verifyReceipt";

    //正式 static final String product =  "https://buy.itunes.apple.com/verifyReceipt";

    请求苹果地址 返回的 内容为

    conten-type = application/json

    请求的苹果的内容为String param = "{\"receipt-data\":\""+客户端返回的base64+"\"}";

    {

        environment = Sandbox; //沙河环境 Sandbox

        receipt =    {

            "adam_id" = 0;

            "app_item_id" = 0;

            "application_version" = 25;//项目版本号

            "bundle_id" = "lianmeng.com"; //项目bundle_id 一定要验证返回的包名和此包名要一致

            "download_id" = 0;

            "in_app" =        (

                            {

                    "is_trial_period" = false;

                    "original_purchase_date" = "2019-12-11 06:19:22 Etc/GMT";

                    "original_purchase_date_ms" = 1576045162000;

                    "original_purchase_date_pst" = "2019-12-10 22:19:22 America/Los_Angeles";

                    "original_transaction_id" = 1000000603451122;

                    "product_id" = "lianmeng_kechengnianka";//对应产品id,自己做一个金额的映射就行,对应到具体的金额,建议命名要规则

                    "purchase_date" = "2019-12-11 06:19:22 Etc/GMT";

                    "purchase_date_ms" = 1576045162000;

                    "purchase_date_pst" = "2019-12-10 22:19:22 America/Los_Angeles";

                    quantity = 1;

                    "transaction_id" = 1000000603451122;//一定要进行去重验证,一个订单号只能加一次款

                },

                            {

                    "is_trial_period" = false;

                    "original_purchase_date" = "2019-12-11 06:19:59 Etc/GMT";

                    "original_purchase_date_ms" = 1576045199000;

                    "original_purchase_date_pst" = "2019-12-10 22:19:59 America/Los_Angeles";

                    "original_transaction_id" = 1000000603451312;

                    "product_id" = "lianmeng_kechengnianka";

                    "purchase_date" = "2019-12-11 06:19:59 Etc/GMT";

                    "purchase_date_ms" = 1576045199000;

                    "purchase_date_pst" = "2019-12-10 22:19:59 America/Los_Angeles";

                    quantity = 1;

                    "transaction_id" = 1000000603451312;

                },

                            {

                    "is_trial_period" = false;

                    "original_purchase_date" = "2019-12-11 08:13:59 Etc/GMT";

                    "original_purchase_date_ms" = 1576052039000;

                    "original_purchase_date_pst" = "2019-12-11 00:13:59 America/Los_Angeles";

                    "original_transaction_id" = 1000000603500479;

                    "product_id" = "lianmeng_kechengnianka";

                    "purchase_date" = "2019-12-11 08:13:59 Etc/GMT";

                    "purchase_date_ms" = 1576052039000;

                    "purchase_date_pst" = "2019-12-11 00:13:59 America/Los_Angeles";

                    quantity = 1;

                    "transaction_id" = 1000000603500479;

                },

                            {

                    "is_trial_period" = false;

                    "original_purchase_date" = "2019-12-11 06:21:21 Etc/GMT";

                    "original_purchase_date_ms" = 1576045281000;

                    "original_purchase_date_pst" = "2019-12-10 22:21:21 America/Los_Angeles";

                    "original_transaction_id" = 1000000603451541;

                    "product_id" = "lianmeng_kechengbanianka";

                    "purchase_date" = "2019-12-11 06:21:21 Etc/GMT";

                    "purchase_date_ms" = 1576045281000;

                    "purchase_date_pst" = "2019-12-10 22:21:21 America/Los_Angeles";

                    quantity = 1;

                    "transaction_id" = 1000000603451541;

                },

                            {

                    "is_trial_period" = false;

                    "original_purchase_date" = "2019-12-11 06:22:22 Etc/GMT";

                    "original_purchase_date_ms" = 1576045342000;

                    "original_purchase_date_pst" = "2019-12-10 22:22:22 America/Los_Angeles";

                    "original_transaction_id" = 1000000603451660;

                    "product_id" = "lianmeng_kechengnianka";

                    "purchase_date" = "2019-12-11 06:22:22 Etc/GMT";

                    "purchase_date_ms" = 1576045342000;

                    "purchase_date_pst" = "2019-12-10 22:22:22 America/Los_Angeles";

                    quantity = 1;

                    "transaction_id" = 1000000603451660;

                },

                            {

                    "is_trial_period" = false;

                    "original_purchase_date" = "2019-12-11 05:59:34 Etc/GMT";

                    "original_purchase_date_ms" = 1576043974000;

                    "original_purchase_date_pst" = "2019-12-10 21:59:34 America/Los_Angeles";

                    "original_transaction_id" = 1000000603446070;

                    "product_id" = "lianmeng_kechengchengzhangka";

                    "purchase_date" = "2019-12-11 05:59:34 Etc/GMT";

                    "purchase_date_ms" = 1576043974000;

                    "purchase_date_pst" = "2019-12-10 21:59:34 America/Los_Angeles";

                    quantity = 1;

                    "transaction_id" = 1000000603446070;

                },

                            {

                    "is_trial_period" = false;

                    "original_purchase_date" = "2019-12-11 06:17:40 Etc/GMT";

                    "original_purchase_date_ms" = 1576045060000;

                    "original_purchase_date_pst" = "2019-12-10 22:17:40 America/Los_Angeles";

                    "original_transaction_id" = 1000000603450733;

                    "product_id" = "lianmeng_kechengnianka";

                    "purchase_date" = "2019-12-11 06:17:40 Etc/GMT";

                    "purchase_date_ms" = 1576045060000;

                    "purchase_date_pst" = "2019-12-10 22:17:40 America/Los_Angeles";

                    quantity = 1;

                    "transaction_id" = 1000000603450733;

                },

                            {

                    "is_trial_period" = false;

                    "original_purchase_date" = "2019-12-13 01:35:30 Etc/GMT";

                    "original_purchase_date_ms" = 1576200930000;

                    "original_purchase_date_pst" = "2019-12-12 17:35:30 America/Los_Angeles";

                    "original_transaction_id" = 1000000604337656;

                    "product_id" = "lianmeng_kechengnianka";

                    "purchase_date" = "2019-12-13 01:35:30 Etc/GMT";

                    "purchase_date_ms" = 1576200930000;

                    "purchase_date_pst" = "2019-12-12 17:35:30 America/Los_Angeles";

                    quantity = 1;

                    "transaction_id" = 1000000604337656;//一定要进行去重验证,一个订单号只能加一次款

                }

            );

            "original_application_version" = "1.0";

            "original_purchase_date" = "2013-08-01 07:00:00 Etc/GMT";

            "original_purchase_date_ms" = 1375340400000;

            "original_purchase_date_pst" = "2013-08-01 00:00:00 America/Los_Angeles";

            "receipt_creation_date" = "2019-12-13 07:21:06 Etc/GMT";

            "receipt_creation_date_ms" = 1576221666000;

            "receipt_creation_date_pst" = "2019-12-12 23:21:06 America/Los_Angeles";

            "receipt_type" = ProductionSandbox;

            "request_date" = "2019-12-13 07:21:32 Etc/GMT";

            "request_date_ms" = 1576221692466;

            "request_date_pst" = "2019-12-12 23:21:32 America/Los_Angeles";

            "version_external_identifier" = 0;

        };

        status = 0;//表示当前请求返回正常

    }

    耗型项目:对于消耗型App内购买项目,用户每次下载时都必须进行购买。一次性服务通常属于消耗型项目,例如钓鱼App 中的鱼饵。

    非消耗型项目:对于非消耗型App内购买项目,用户仅需要购买一次。不会过期或随使用而减少的服务通常为非消耗型项目,例如游戏App 的新跑道。

    自动续订订阅:通过自动续订订阅,用户可以购买指定时间期限内的更新和动态内容。除非用户取消选择,否则订阅(例如杂志订阅等)会自动续订。

    免费订阅:通过免费订阅,开发者可以将免费订阅内容放入“报刊杂志”。用户注册免费订阅后,该订阅内容将会出现在与该用户Apple ID 关联的所有设备上。请注意,免费订阅不会过期,并且仅在支持报刊杂志功能的 App 中提供。

    非续订订阅:非续订订阅允许有时限性的营销服务。对于 App 内购买项目中的限时访问内容,就需使用非续订订阅。例如,导航App 中语音导航功能的一周订阅,或者年度订阅已存档的视频或音频的在线目录。

    后面是一些别人的写的内购地址:

    苹果内购 服务器端验证返回的内容   税务和银行业务添加流程

    2017苹果内购最新教程      内购成功验证流程      内购注意点

    内购(IAP)详解   内购服务端验证

    相关文章

      网友评论

          本文标题:iOS内购问题

          本文链接:https://www.haomeiwen.com/subject/dawfnctx.html