海外SDK之----------韩国支付onestore

SDK 同时被 3 个专栏收录
3 篇文章 0 订阅
3 篇文章 0 订阅
1 篇文章 0 订阅
 
 
今天给大家来一个比较简单的韩国本土支付,难度一般般吧,主要是没有任何的中文文档啊,全英文啊,我英文又特别渣啊,结果我又让运营搞个简单的翻译过来,为什么写这个呢,就是因为支付流程曲折,没有任何官方中文文档,出了这个,让负责海外的小伙伴能够快速接入,完成工作,方便撸啊,王者农药啊。对了,有游戏开发的大牛记得加我们哦 ,群197309807 ,不多辣啦,我们开始!
 
 
首先你运营给你一个文件 Onestore_iap_plugin.zip  你解压出来就是了,或者去onestore的官网去下载。接入代码和流程大致如下:

 

 

 

 
 
    /*
        这里只是一个成员变量的区分 
    */
    public void SetPayStae( int intSate)
    {
        mPayStae = intSate;
    }

 

 

 

 

 

 
 
/* 全局变量解析 */ IapPlugin mPlugin; // 支付实例对象 final String OneStoreID = "你的支付ID"; // 支付的商品ID String PayProductId = ""; // 保存从后台取得的支付数据数组 JSONArray mPayJSONArray= new JSONArray(); //保存当前的支付数据 json JSONObject mPayJson = new JSONObject(); // 支付的状态 int mPayStae = 0; // 正常 // 成功code final String successCode = "0000"; // 当前是什么模式 正式或者调试 boolean mGameStae = true;

 

 

 

 

 

 
 
// 初始化onestore支付 public void InitIapPlugin() { if (mGameStae) { // 正式环境 mPlugin = IapPlugin.getPlugin(mActivity, IapPlugin.RELEASE_MODE); } else { // 测试用 mPlugin = IapPlugin.getPlugin(mActivity, IapPlugin.DEVELOPMENT_MODE); } getIapPluginInfo(); }
 
 
    // 获取商品信息
    /*
        这里呢有一个回调,我把好几个回调都搞到这里了,用了一个状态区分
    */
    public  void  getIapPluginInfo()
    {
        SetPayStae(1);
        mPlugin.sendCommandProductInfo(mAbsRequestCallback, ProcessType.FOREGROUND_IF_NEEDED, "你的OneStoreID");

    };

 

 

 

    /*
        这里只是一个成员变量的区分 
    */
    public void SetPayStae( int intSate)
    {
        mPayStae = intSate;
    }

 

 

 

 

 

   /*
        这里是一个全局的回调(包括保存商品ID  检查是商品否可以购买  查询支付明细等)
    */
    private IapPlugin.AbsRequestCallback mAbsRequestCallback = new IapPlugin.AbsRequestCallback()
    {
        @Override
        protected void onResponse(Response response)
        {

            if( mPayStae == 1 )
            {
                SaveIapPluginPayInLoal(response);
            }
            else if(mPayStae == 2)
            {
                SendPurchaseHistorlogic(response);
            }
            else if(mPayStae == 3)
            {
                SendPurchasabilitlogic( response );
            }
            mPayStae = -1;
        }


        @Override
        public void onError(String reqid, String errcode, String errmsg)
        {
            // error
            mPayStae = -1;
            Log.d(TAG,"errcode====="+errcode);
            Log.d(TAG,"errmsg====="+errmsg);

        }
    };

 

 

 

 

 

    // 查询支付明细
    public  void  SendPurchaseHistor(String pId)
    {
        SetPayStae(2);
        // 查询支付明细
        mPlugin.sendCommandPurchaseHistory(mAbsRequestCallback, ProcessType.FOREGROUND_IF_NEEDED, OneStoreID, pId);

    };


    /*
     * 检查是否可以购买 逻辑
     * */
     public void SendPurchasabilitlogic( Response response )
     {
         if (successCode.equals(response.result.code))
         {
             if (response.result.product != null && response.result.product.size() > 0)
             {
                 Response.Product p = response.result.product.get(0);
                 if(p.purchasability)
                 {
                     // 你可以购买这个商品
                     IapPluginPay(PayProductId,strextra);
                     return;
                 }
             }
         }
         IapPluginPay(PayProductId,strextra);
     }
     /**
      * 检查是否可以购买
      * 可单一查询,多重查询
      */
    public  void  SendPurchasabilit(String pId)
    {
        SetPayStae(3);
        mPlugin.sendCommandCheckPurchasability(mAbsRequestCallback, ProcessType.FOREGROUND_IF_NEEDED, OneStoreID, pId);

    };

 

 

 

    // 保存商品ID在本地 jSON格式
    public void SaveIapPluginPayInLoal( Response response )
    {
        for (Response.Product p : response.result.product)
        {
            JSONObject json = new JSONObject();
            try {
                json.put("id",p.id);
                json.put("price",p.price);
                json.put("type",p.type);
                json.put("validity",p.validity); // 合法性质
                json.put("id",p.id);
                json.put("name",p.name);

            } catch (JSONException e) {
                e.printStackTrace();
            }
            mPayJSONArray.put(json);
        }
    }

 

 

 

 

    /*
       下面是一个支付回调 全局的
       还有一个自己封装的支付函数
    */

    // 支付回掉
    private IapPlugin.AbsRequestCallback mAbsPayCallback = new IapPlugin.AbsRequestCallback()
    {
        @Override
        protected void onResponse(Response response)
        {
            // 成功code
            final String successCode = "0000";
            // 成功确认
            if (successCode.equals(response.result.code))
            {
                SendPurchaseHistor(PayProductId);
            }
        }


        @Override
        public void onError(String reqid, String errcode, String errmsg)
        {
            show_Text("Payment failed");
            Log.d(TAG,"errcode====="+errcode);
            Log.d(TAG,"errmsg====="+errmsg);
        }
    };

    // 支付函数
    public void IapPluginPay(String pid,String token)
    {
        PaymentParams params = new PaymentParams.Builder(OneStoreID, pid).build();
        try {
            String name = mPayJson.getString("name");

            mPlugin.sendPaymentRequest(OneStoreID,pid,name,token,"",mAbsPayCallback);

        } catch (JSONException e) {
            e.printStackTrace();
        }

    }

 

 

 

 

 

 

    /*
        最后呢是一个支付成功的查询
    */
   // 查询支付明细 逻辑
    public void SendPurchaseHistorlogic( Response response )
    {
        // 结果中存在多个商品,获取想要的商品
        for (Response.Product p : response.result.product)
        {
            int a = 0;

            final String successStatusCode = "PH00";
            if (successStatusCode.equals(p.status.code))
            {
                // Product p中获取想要的信息
                // check 商品认证成功
                // 支付成功
                JSONObject json = new JSONObject();
                try {
                    json.put("date",p.startDate);
                    json.put("token",strextra);

                }catch (JSONException e) {
                    e.printStackTrace();
                }

                支付成功后的逻辑  之后就看你咯
            }
            else
            {
                // 支付失败  也看你咯
            }
        }
    }

 

 

 

 

    /*
        自己封装的支付函数
        你传入一个商品ID 看看json缓存里面有木有 有就开始支付
    */
    @Override
    public void Pay(String pid, String extra, final int cb)
    {
        String product_id =  pid;
        int PayLen = mPayJSONArray.length();
        if (PayLen <= 0)
        {
            show_Text("没有获取到商品ID");
            Log.d(TAG,"没有获取到商品ID");
            return;
        }
        for (int i = 0; i < PayLen ; i++) {
            try {
                JSONObject  json = (JSONObject) mPayJSONArray.get(i);
                String TId = json.getString("id");
                if(product_id.equals(TId))
                {
                    PayProductId = TId;
                    mPayJson = json;
                    break;
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
        SendPurchasabilit(PayProductId);
    }

 

 

 

 

 

 

 

============支付流程解析======

 

  游戏一启动你要调用  InitIapPlugin() 初始化支付SDK  里面有个 getIapPluginInfo()函数负责去后台得到你配置的支付数据  最后 SaveIapPluginPayInLoal()函数保存数据在josn数据 游戏初始化成功。
 
然后是调用 pay()函数的时候找对应的商品ID,就会调用 SendPurchasabilit()函数  看看是否可以购买,如果可以购买就直接 走这里 SendPurchasabilitlogic()会调用IapPluginPay 触发SDKsendPaymentRequest()支付函数,mAbsPayCallback()就会收到你支付的回调了,注意,这里还没有完成,还有走SendPurchaseHistor()查询你当前的支付明细状态,SendPurchaseHistorlogic()这个就是啦,如果你的支付状态等于"PH00"才算真正的充值成功。艾玛这剧情真的蜿蜒曲折,绵绵悠长。当然主要还是你们接入成功才算成功!  
 
 
																	我是大嫂!

 

 

 

  • 2
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值