当前位置:操作系统 > 安卓/Android >>

Android支付接入(一):支付宝

相信相同过App获取利润的都会需要接入计费SDK,下边就跟大家走一遍完整的支付宝SDK接入,支付系列均通过计费Button触发,计费所有代码均放到一个java文件实现,这样虽然会有点违背java面向对象及封装性,但这样做的一个好处是可以快速集成到不同的游戏中,将改动的文件降到最低,各有利弊吧,如果大家有什么更好的方法,望一起交流,好了,废话不多说了,开始干活。
PS:初次写博文,各方面还不够完善,看到此博文的朋友有什么意见或者建议请回复或者留言,你们的支持是我最大的动力。
 
注意事项:
1.添加android.permission.INTERNET权限和android.permission.ACCESS_NETWORK_STATE权限
2.代码中出现注释的地方重点看,没注释的地方可以不看
3.参考下边代码及附带demo足以让你完成支付宝支付,若想了解支付宝更多相关问题请参考附带文档,demo及文档下载地址:http://pan.baidu.com/share/link?shareid=421254&uk=473193131
4.想获取支付宝合作商户ID,及支付宝公钥请点击支付宝链接,生成密钥及PKCS8转码工具在文档中
 
好了,开始贴代码
MainActivity(程序入口文件)
package com.example.blogforzfb;
import android.os.Bundle;
import android.view.View;
import android.app.Activity;
 
public class MainActivity extends Activity {
 
@Override
protected void onCreate(Bundle savedInstanceState) {
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
//拿到Fiap对象并传入容器
Fiap fiap = new Fiap(MainActivity.this);
//调用支付方法,并传入支付金额
fiap.android_pay(0.01);
}
});
}
 
}
 
Fiap.java(支付逻辑所在文件)
package com.example.blogforzfb;
 
// 支付宝应用支付
// 2012-09-20 14:41:47
// (c) 2012 Catcap
 
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.URL;
import java.net.URLEncoder;
import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.ArrayList;
import java.util.List;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLSession;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONException;
import org.json.JSONObject;
import com.alipay.android.app.IAlixPay;
import com.alipay.android.app.IRemoteServiceCallback;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.ComponentName;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.ServiceConnection;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.os.Looper;
import android.os.Message;
import android.os.RemoteException;
import android.util.Log;
import android.view.KeyEvent;
import android.widget.Toast;
 
 
@SuppressLint ("HandlerLeak")
public class Fiap{
    Activity mActivity = null;
    
    // ===================================
    // JAVA 的接口
    // ===================================
   
    
    public Fiap(Activity activity){
   
    mActivity = activity;
   
    }
    
    //这里传过来的是想支付多少钱(最好定义成double的,方便调试,毕竟每次测试都支付几元大洋不是每个人都负担的起的)
    public void android_pay (double coin){
   
    //支付宝支付必须依赖网络,所以在这里必须加网络判定
        if (!is_can_internet (mActivity)){
       
            fiapHandler.sendEmptyMessage(1);
            return;
        }
        
        Message msg = new Message ();
        Bundle bundle = new Bundle();
        bundle.putDouble("coin", coin);
        msg.setData(bundle);
        msg.what = 1;
        fss.sendMessage (msg);
    }
    
    private Handler fiapHandler = new Handler(){
   
    public void handleMessage(Message msg) {
    if (msg.what == 1) {
    new AlertDialog.Builder (mActivity).setTitle ("提示").setMessage ("连接不到网络。").setPositiveButton ("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Intent intent = new Intent(
"android.settings.WIFI_SETTINGS");
mActivity.startActivity(intent);
}
}).create ().show ();
}
    };
    };
    
    // ===================================
    // 支付宝
    // ===================================
    public class PartnerConfig {
 
//以下配置涉及到公司内容,所以略去,需自己配置
        // 合作商户ID。用签约支付宝账号登录ms.alipay.com后,在账户信息页面获取。
        public static final String PARTNER = ""; 
        // 商户收款的支付宝账号
        public static final String SELLER = "";
        // 商户(RSA)私钥(注意一定要转PKCS8格式,否则在Android4.0及以上系统会支付失败)
        public static final String RSA_PRIVATE = "";
        // 支付宝(RSA)公钥 用签约支付宝账号登录ms.alipay.com后,在密钥管理页面获取。
        public static final
补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,