zoukankan      html  css  js  c++  java
  • Android支付接入(五):机锋网

    原地址:http://blog.csdn.net/simdanfeg/article/details/9012083

    前边已经陆续跟大家走了一遍运营商和支付宝付费接入,今天跟大家一起看看机锋网的支付接入。其实付费接入本身并没有太多需要注意的地方,做的多了以后你会发现套路都是大同小异的。而需要注意的地方在于怎么跟游戏兼容及后期的维护,包括增减支付方式。现在谈下我个人理解(说的不对希望大家猛喷),付费界面及逻辑尽量不要给一个单独的Activity,因为

    1.界面的频繁跳转会费时(尤其对于用cocos2d-x写的游戏来说界面跳出跳进延时很大,会影响游戏性);

    2.开启新Activity会涉及到数据的传递,新Activity的维护及销毁,这里力求简洁,频繁的数据传递难免会出错(大家都知道,支付的逻辑是不允许出现丁点错误的),如果单一渠道的付费逻辑上很简单,如果集合了5、6个甚至更多的付费方式的时候以及掺杂游戏逻辑之后,支付逻辑不够简洁会使你头疼。

    3.正在尝试的让cocos2d-x的游戏跟Unity3D的游戏使用一套付费接口,这样的话Activity多了不会是一个好的选择

    4.如果使用Activity那么AndroidManifest里边必须要注意注册此Activity,这是一个定时炸弹,因为不同支付方式都需要在Manifest里边注册相关配置,当配置量大了以后难免会漏掉次Activity的声明,SDK的接入是批量的你可能会同时接不同的游戏和不同的付费方式,这就需要在最短的时间里准确的接好多种游戏及付费方式,因此注意事项越少越好。

    机锋的支付是比较简单的一种支付方式,而且其本身已经集成了支付宝和充值卡支付,现在我们来看下代码:

    AndroiManifest.xml

    [html] view plaincopy
     
    <!-- 机锋网 -->  
            <activity  
                android:name="com.gfan.sdk.payment.PaymentsActivity"  
                android:configChanges="orientation|keyboardHidden" />  
            <activity  
                android:name="com.gfan.sdk.charge.ChargeActivity"  
                android:configChanges="orientation|keyboardHidden" />  
            <activity  
                android:name="com.gfan.sdk.account.LoginActivity"  
                android:configChanges="orientation|keyboardHidden"  
                android:windowSoftInputMode="adjustUnspecified" />  
      
            <!-- 请替换gfan_pay_appkey为开发者平台中的appKey -->  
            <meta-data  
                android:name="gfan_pay_appkey"  
                android:value="XXX" />  
      
            <!-- 不用动 -->  
            <meta-data  
                android:name="gfan_type"  
                android:value="paysdk" />  
      
            <!-- 不用动 -->  
            <meta-data  
                android:name="gfan_cpid"  
                android:value="testcpid" />  
      
    <!--这里是Activity的声明及机锋参数配置-->  
       
      
        <uses-permission android:name="android.permission.INTERNET"/>  
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>  
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>  
      
    <!--权限的配置,第三方平台支付都是走的网络,所以需要联网权限,及获取是否联网的权限-->  

    Fiap.java

    [java] view plaincopy
     
    package com.example.blogforgfan;  
      
    // 机锋应用内支付  
    import com.gfan.sdk.payment.PaymentInfo;  
    import com.gfan.sdk.payment.PaymentsActivity;  
    import android.annotation.SuppressLint;  
    import android.app.Activity;  
    import android.app.AlertDialog;  
    import android.content.Context;  
    import android.content.Intent;  
    import android.net.ConnectivityManager;  
    import android.net.NetworkInfo;  
    import android.os.Bundle;  
    import android.os.Handler;  
    import android.view.View;  
      
    @SuppressLint("HandlerLeak")  
    public class Fiap extends Activity {  
      
        final int CATCAP_ANDROID_PAY = 0; // 跳转Activity请求码  
        int catcap_android_pay_catcap_coin = 0; // 购买的猫币  
      
        @Override  
        protected void onCreate(Bundle savedInstanceState) {  
            // TODO Auto-generated method stub  
            super.onCreate(savedInstanceState);  
            setContentView(R.layout.activity_main);  
            findViewById(R.id.button1).setOnClickListener(  
                    new View.OnClickListener() {  
      
                        @Override  
                        public void onClick(View v) {  
                            // TODO Auto-generated method stub  
                            android_pay(2);  
                        }  
                    });  
        }  
      
        // ===================================  
        // JAVA  
        // ===================================  
      
        public void android_pay(int index) {  
            if (!is_can_internet(Fiap.this)) {  
                fiapHandler.sendEmptyMessage(1);  
                return;  
            }  
            int coin = 0;  
            switch (index) {  
            case 0:  
                coin = 2;  
                this.catcap_android_pay_catcap_coin = 50;  
                break;  
            case 1:  
                coin = 4;  
                this.catcap_android_pay_catcap_coin = 120;  
                break;  
            case 2:  
                coin = 6;  
                this.catcap_android_pay_catcap_coin = 200;  
                break;  
            case 3:  
                coin = 8;  
                this.catcap_android_pay_catcap_coin = 300;  
                break;  
      
            default:  
                break;  
            }  
            // coin *= 10;此处coin是人民币,换算成机锋券需*10  
            // 设置购买信息(购买的道具名,付费描述,支付金额,订单号)  
            // PS:这里需要自己组织订单号,所以需保证每次订单号是唯一的,此处传入的金额是机锋券(1元=10机锋券)  
            PaymentInfo info = new PaymentInfo("猫币", "购买游戏所用猫币", coin,  
                    get_order_id());  
            // 到购买页面  
            Intent intent = new Intent(this, PaymentsActivity.class);  
            intent.putExtra(PaymentsActivity.EXTRA_KEY_PAYMENTINFO, info);  
            startActivityForResult(intent, CATCAP_ANDROID_PAY);  
        }  
      
        // ===================================  
        // Android  
        // ===================================  
        @Override  
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
            if (requestCode == CATCAP_ANDROID_PAY) { // 保证结果码跟请求码一致  
                if (resultCode == RESULT_OK) { // 支付成功,这里填写支付成功后的逻辑  
      
                    new AlertDialog.Builder(this).setTitle("感谢购买猫币")  
                            .setPositiveButton("确定", null).create().show();  
      
                }  
            }  
            // 清空数据  
            this.catcap_android_pay_catcap_coin = 0;  
            super.onActivityResult(requestCode, resultCode, data);  
        }  
      
        public boolean is_can_internet(final Context context) {  
            try {  
                ConnectivityManager manger = (ConnectivityManager) context  
                        .getSystemService(Context.CONNECTIVITY_SERVICE);  
                NetworkInfo info = manger.getActiveNetworkInfo();  
                return (info != null && info.isConnected());  
            } catch (Exception e) {  
                return false;  
            }  
        }  
      
        public String get_order_id() {  
            long ran1 = get_round(1111, 9999);  
            long ran2 = get_round(1111, 9999);  
            // return android_get_umeng_channel () + "_" + ran1 +  
            // System.currentTimeMillis () + ran2;  
            return "_" + ran1 + System.currentTimeMillis() + ran2;  
        }  
      
        public long get_round(int min, int max) {  
            return Math.round(Math.random() * (max - min) + min);  
        }  
      
        Handler fiapHandler = new Handler() {  
      
            public void handleMessage(android.os.Message msg) {  
                if (msg.what == 1) {  
                    new AlertDialog.Builder(Fiap.this).setTitle("提示")  
                            .setMessage("连接不到网络。").setPositiveButton("确定", null)  
                            .create().show();  
                }  
            };  
        };  
    }  
    
     

    <!-- 转载完毕-->

  • 相关阅读:
    设计模式之桥接模式
    设计模式之适配器模式
    设计模式之代理模式
    设计模式之建造者模式
    设计模式之抽象工厂模式
    设计模式之工厂方法模式
    设计模式之简单工厂模式
    设计模式之原型模式
    api接口测试的步骤
    3种优化回归测试的方法
  • 原文地址:https://www.cnblogs.com/123ing/p/3850473.html
Copyright © 2011-2022 走看看