当前位置: 首页 > 编程日记 > 正文

Android支付接入(五):机锋网

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

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

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

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

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

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

AndroiManifest.xml

[html] view plaincopy
  1. <!-- 机锋网 -->
  2. <activity
  3. android:name="com.gfan.sdk.payment.PaymentsActivity"
  4. android:configChanges="orientation|keyboardHidden" />
  5. <activity
  6. android:name="com.gfan.sdk.charge.ChargeActivity"
  7. android:configChanges="orientation|keyboardHidden" />
  8. <activity
  9. android:name="com.gfan.sdk.account.LoginActivity"
  10. android:configChanges="orientation|keyboardHidden"
  11. android:windowSoftInputMode="adjustUnspecified" />
  12. <!-- 请替换gfan_pay_appkey为开发人员平台中的appKey -->
  13. <meta-data
  14. android:name="gfan_pay_appkey"
  15. android:value="XXX" />
  16. <!-- 不用动 -->
  17. <meta-data
  18. android:name="gfan_type"
  19. android:value="paysdk" />
  20. <!-- 不用动 -->
  21. <meta-data
  22. android:name="gfan_cpid"
  23. android:value="testcpid" />
  24. <!--这里是Activity的声明及机锋參数配置-->
  25. <uses-permission android:name="android.permission.INTERNET"/>
  26. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
  27. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
  28. <!--权限的配置,第三方平台支付都是走的网络,所以须要联网权限,及获取是否联网的权限-->

Fiap.java

[java] view plaincopy
  1. package com.example.blogforgfan;
  2. // 机锋应用内支付
  3. import com.gfan.sdk.payment.PaymentInfo;
  4. import com.gfan.sdk.payment.PaymentsActivity;
  5. import android.annotation.SuppressLint;
  6. import android.app.Activity;
  7. import android.app.AlertDialog;
  8. import android.content.Context;
  9. import android.content.Intent;
  10. import android.net.ConnectivityManager;
  11. import android.net.NetworkInfo;
  12. import android.os.Bundle;
  13. import android.os.Handler;
  14. import android.view.View;
  15. @SuppressLint("HandlerLeak")
  16. public class Fiap extends Activity {
  17. final int CATCAP_ANDROID_PAY = 0// 跳转Activity请求码
  18. int catcap_android_pay_catcap_coin = 0// 购买的猫币
  19. @Override
  20. protected void onCreate(Bundle savedInstanceState) {
  21. // TODO Auto-generated method stub
  22. super.onCreate(savedInstanceState);
  23. setContentView(R.layout.activity_main);
  24. findViewById(R.id.button1).setOnClickListener(
  25. new View.OnClickListener() {
  26. @Override
  27. public void onClick(View v) {
  28. // TODO Auto-generated method stub
  29. android_pay(2);
  30. }
  31. });
  32. }
  33. // ===================================
  34. // JAVA
  35. // ===================================
  36. public void android_pay(int index) {
  37. if (!is_can_internet(Fiap.this)) {
  38. fiapHandler.sendEmptyMessage(1);
  39. return;
  40. }
  41. int coin = 0;
  42. switch (index) {
  43. case 0:
  44. coin = 2;
  45. this.catcap_android_pay_catcap_coin = 50;
  46. break;
  47. case 1:
  48. coin = 4;
  49. this.catcap_android_pay_catcap_coin = 120;
  50. break;
  51. case 2:
  52. coin = 6;
  53. this.catcap_android_pay_catcap_coin = 200;
  54. break;
  55. case 3:
  56. coin = 8;
  57. this.catcap_android_pay_catcap_coin = 300;
  58. break;
  59. default:
  60. break;
  61. }
  62. // coin *= 10;此处coin是人民币,换算成机锋券需*10
  63. // 设置购买信息(购买的道具名,付费描写叙述,支付金额,订单号)
  64. // PS:这里须要自己组织订单号,所以需保证每次订单号是唯一的,此处传入的金额是机锋券(1元=10机锋券)
  65. PaymentInfo info = new PaymentInfo("猫币""购买游戏所用猫币", coin,
  66. get_order_id());
  67. // 到购买页面
  68. Intent intent = new Intent(this, PaymentsActivity.class);
  69. intent.putExtra(PaymentsActivity.EXTRA_KEY_PAYMENTINFO, info);
  70. startActivityForResult(intent, CATCAP_ANDROID_PAY);
  71. }
  72. // ===================================
  73. // Android
  74. // ===================================
  75. @Override
  76. protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  77. if (requestCode == CATCAP_ANDROID_PAY) { // 保证结果码跟请求码一致
  78. if (resultCode == RESULT_OK) { // 支付成功,这里填写支付成功后的逻辑
  79. new AlertDialog.Builder(this).setTitle("感谢购买猫币")
  80. .setPositiveButton("确定"null).create().show();
  81. }
  82. }
  83. // 清空数据
  84. this.catcap_android_pay_catcap_coin = 0;
  85. super.onActivityResult(requestCode, resultCode, data);
  86. }
  87. public boolean is_can_internet(final Context context) {
  88. try {
  89. ConnectivityManager manger = (ConnectivityManager) context
  90. .getSystemService(Context.CONNECTIVITY_SERVICE);
  91. NetworkInfo info = manger.getActiveNetworkInfo();
  92. return (info != null && info.isConnected());
  93. catch (Exception e) {
  94. return false;
  95. }
  96. }
  97. public String get_order_id() {
  98. long ran1 = get_round(11119999);
  99. long ran2 = get_round(11119999);
  100. // return android_get_umeng_channel () + "_" + ran1 +
  101. // System.currentTimeMillis () + ran2;
  102. return "_" + ran1 + System.currentTimeMillis() + ran2;
  103. }
  104. public long get_round(int min, int max) {
  105. return Math.round(Math.random() * (max - min) + min);
  106. }
  107. Handler fiapHandler = new Handler() {
  108. public void handleMessage(android.os.Message msg) {
  109. if (msg.what == 1) {
  110. new AlertDialog.Builder(Fiap.this).setTitle("提示")
  111. .setMessage("连接不到网络。").setPositiveButton("确定"null)
  112. .create().show();
  113. }
  114. };
  115. };
  116. }


<!-- 转载完成-->

转载于:https://www.cnblogs.com/mfrbuaa/p/3852707.html

相关文章:

腾讯广告广点通API接入文档(Android)

官方文档地址 如果能够看懂文档的也没有必要再往下面看了。本篇文章就到此结束。 下面记录的是本人在上面锁踩过的坑&#xff0c;因为我发现Mac电脑上面的联系客服不是我想要的。 本来只是内部使用的文档&#xff0c;后来想想还是公开出来&#xff0c;希望能够帮助到人。进入正…

Linux下的下载工具 axel

下载地址&#xff1a;http://wilmer.gaast.net/main.php/axel.html Axel是命令行下的多线程下载工具&#xff0c;支持断点续传&#xff0c;速度通常情况下是Wget的几倍。 下载后使用如下命令编译安装&#xff1a; #tar zxvf axel-1.0a.tar.gz #cd axel-1.0a/ #./con…

集成学习知识点汇总

为啥叫集成学习 结合多个学习器来完成学习任务。 俗话说就是&#xff0c;团结力量大。 个体学习器可以相同可以不同。如果相同叫同质集成&#xff0c;如果不尽相同叫异质集成。 个体学习器最好满足&#xff1a;好而不同。 所谓好(准确性)&#xff0c;就是个体学习器不能太坏&…

hdu 2028 Lowest Common Multiple Plus

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid2028 题目大意&#xff1a;求最小公倍数&#xff0c;用辗转相除法。 1 #include <stdio.h>2 int main ()3 {4 int gcd(int a,int b);5 int a,b,n,i,c;6 while (scanf("%d",&n)…

TreeView

6.遍历TreeView节点(递归算法) private void Page_Load(object sender, System.EventArgs e) { GetAllNodeText(TreeView1.Nodes); } void GetAllNodeText(TreeNodeCollection tnc) { foreach(TreeNode node in tnc) { if(node.Nodes.Count!0) GetAllNodeText(node.Nodes); Res…

FZU 2297 Number theory【线段树/单点更新/思维】

Given a integers x 1, you have to apply Q (Q ≤ 100000) operations: Multiply, Divide. Input First line of the input file contains an integer T(0 < T ≤ 10) that indicates how many cases of inputs are there. The description of each case is given below: …

<软件过程与改进>计算大题考点总结与例题

1.PSP_PROBE估算法 常见考法&#xff1a;给历史数据&#xff0c;需要选择代理规模的估算值和程序规模/所需资源的实际值&#xff0c;用以下公式求得拟合公式参数 然后使用公式计算出未知的程序规模/所需资源 例题 2.PSP过程质量的度量指标_yield 常见考法&#xff1a;给出缺…

c语言exit和return区别,在fork和vfork中使用

转自c语言exit和return区别&#xff0c;在fork和vfork中使用 exit函数在头文件stdlib.h中。 简述&#xff1a; exit&#xff08;0&#xff09;&#xff1a;正常运行程序并退出程序&#xff1b; exit&#xff08;1&#xff09;&#xff1a;非正常运行导致退出程序&#xff1b; r…

WIKI与BLOG殊途同归(转)

现在很多朋友都拥有了自己的BLOG网页&#xff0c;尽管他们可能并不打算走木子美那种写私人日记的路子&#xff0c;但彰显个性、张扬自我的目的&#xff0c;大都类似。其实在这个时候&#xff0c;中国的许多技术迷们已经把目光投向了WIKI。 历经了网络反黄与木子美&#xff0c;中…

Spring MVC中DispatcherServlet理解总结(1)

DispatcherServlet在web.xml中的配置 <context-param><!--默认配置文件为/WEB-INF/[servlet名字]-servlet.xml--><param-name>contextConfigLocation</param-name><param-value>WebApplicationContext的上下文配置</param-value> </con…

功能点度量方法介绍

功能点度量方法是利用软件需求分析度量软件规模。 软件需求分析包括&#xff1a;软件功能需求分析、软件性能需求分析 在需求分析阶段可以利用数据流图和用例图对软件规模进行度量&#xff0c;分别对应功能点度量与用例点度量方法 1.功能点度量方法的分类 第三种 IFPUG是我…

微软2014校园招聘笔试试题

转载请标明出处&#xff0c;原文地址&#xff1a;http://blog.csdn.net/hackbuteer1/article/details/121908071、Which statement(s) is(are) correct about thread and process&#xff1f;Select all that apply.(5 Points) A、Threads share the same address space of the…

vi(vim)快捷键小记

1、前言 vi是“visual interface”的缩写&#xff0c;vim是vi IMproved(增强版的vi)。总结一下自己平时常用的vim快捷键&#xff0c;当是忘记也好&#xff0c;后续会不定期更新。 2、vim 快捷键 快捷键说明vi[m] file打开[新建]文件命令模式可以移动光标、删除字符等h,j,k,l左…

Premiere Pro2.0用DebugMode2.3搭桥小日本4.0输出图解

看图说话&#xff0c;不懂的多试试看首先明确几点&#xff1a;1。3个软件&#xff1a;Premiere Pro2.0、DebugMode&#xff08;帧服务器&#xff09;、小日本&#xff08;TMPGEnc 4.0 XPress&#xff09;2。渲染过程是在小日本中完成&#xff0c;与DebugMode无关&#xff0c;De…

用例点度量方法介绍

用例点度量方法分为6个步骤&#xff0c;分别是 step 1:计算未调整前的角色(执行者)权重 将角色按照复杂程度分为3类&#xff0c;具体如下 则本例中 UAW1121329 计算未调整前的用例权重UUC 有三种评估用例复杂程度的方法&#xff0c;具体如下 以下是用例权重评估表(普通那…

NYOJ——街区最短路径问题

街区最短路径问题 时间限制&#xff1a;3000 ms | 内存限制&#xff1a;65535 KB难度&#xff1a;4描述一个街区有很多住户&#xff0c;街区的街道只能为东西、南北两种方向。住户只可以沿着街道行走。各个街道之间的间隔相等。用(x,y)来表示住户坐在的街区。例如&#xff08…

Git 中常用的 4 个命令

使用 Git 进行版本管理时&#xff0c;肯定不只做提交&#xff0c;有时候也会需要回退修改&#xff0c;并且在回退的基础上进行重新提交&#xff0c;这时候有几个常用的命令就需要用到了&#xff0c;下面分别做介绍。 1、查看提交日志 首先&#xff0c;我们查看当前提交记录的命…

7月17日 晴

小懒猫&#xff0c;太阳晒PP拉Mua转载于:https://www.cnblogs.com/loverain/archive/2008/07/17/1244992.html

AS更改初始布局遇到的问题

将所有的simple.xml.ftl的内容都改成 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"…

android Json解析详解

JSON的定义&#xff1a; 一种轻量级的数据交换格式&#xff0c;具有良好的可读和便于快速编写的特性。业内主流技术为其提供了完整的解决方案&#xff08;有点类似于正则表达式 &#xff0c;获得了当今大部分语 言的支持&#xff09;&#xff0c;从而可以在不同平台间进行数据交…

[二]Java虚拟机 jvm内存结构 运行时数据内存 class文件与jvm内存结构的映射 jvm数据类型 虚拟机栈 方法区 堆 含义...

前言简介 class文件是源代码经过编译后的一种平台中立的格式 里面包含了虚拟机运行所需要的所有信息,相当于 JVM的机器语言 JVM全称是Java Virtual Machine ,既然是虚拟机,他终归要运行在物理机上 在操作系统中体现出来的也就是一个进程 操作系统会给他分配资源,割一块内存作为…

import android.support.v7.widget.RecyclerView失败

换成 androidx.recyclerview.widget.RecyclerView 参考文章 https://blog.csdn.net/u013183608/article/details/89428611/

CrackMe_001

本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己)&#xff0c;一步步尝试将160个CrackMe全部破解&#xff0c;如果可以&#xff0c;通过任何方式写出一个类似于注册机的东西。 其中&#xff0c;文章中按照如下逻辑编排&#xff08;解决如下问题&#xff09;&…

用javascript实现的纵版飞行射击游戏—《天机》

花了一个半月的时间用javascript完成了这款web版飞行射击游戏&#xff0c;游戏效果接近一般的客户端游戏&#xff0c;不过对机器的要求稍微高点点&#xff0c;主要是CPU&#xff0c;最好在1.5GHZ以上&#xff0c;不然可能会比较卡&#xff0c;支持IE、FF、Opera、safari。 用ja…

对分组交换(packet switching)高效迅速灵活可靠四个优点的理解

1.什么是分组&#xff1f; 通信过程中要发送的整块数据被称为一个报文(message)&#xff0c;报文被划分为一个个更小的等长数据段&#xff0c;每个数据段前加入一些由必要的控制信息组成的首部后&#xff0c;就构成了一个分组。分组是在互联网中传送的数据单元(长报文&#xff…

06、ActivationDeactivation

1、将App.xaml中的StartupUri"MainWindow.xaml"删除。 2、使用NuGet安装Prism.Wpf、Prism.Core、Prism.Unity。 3、添加类“Bootstrapper”&#xff0c;编辑如下&#xff1a; 1 using System;2 using System.Collections.Generic;3 using System.Linq;4 using System…

Git 学习笔记一

Git的基本配置和使用 一、git add ;git commit;git commit -a(默认跟踪修改直接提交(不包括新文件))。 二、tig命令 查看修改记录的前端工具&#xff0c;方面查看修改记录。相当于git log –p。 三、git config --global alias.ci "commit -a -v"添加命令别名&#x…

vb 取得计算机名及目录

Public gCompName 取得计算机名及Windows目录 Dim i% Dim c$ Dim cSql As String Dim cProduct As String c Space(256) i GetComputerName(c, 256) gCompName Trim(c) gCompName Left(gCompName, Len(gCompName) - 1) 读取MAC地址 Dim…

速率单位和信息量单位区分

网络技术钟的速率指的是数据的传送速率&#xff0c;也称为数据率或比特率。 单位是bit/s 比特每秒 也写作b/s 或bps(bit per second) 当数据率较高时 常常在bit/s前面加一个字母&#xff0c;如 k 10^3 M 10^6 G 10^9 T 10^12 P 10^15 …… 数据量往往用字节B作为度量单位…

python 自动生成C++代码 (代码生成器)

python 代码自动生成的方法 &#xff08;代码生成器&#xff09; 遇到的问题 工作中遇到这么一个事&#xff0c;需要写很多C的底层数据库类&#xff0c;但这些类大同小异&#xff0c;无非是增删改查&#xff0c;如果人工来写代码&#xff0c;既费力又容易出错&#xff1b;而借用…