Android 支付宝支付详解与demo

先给出可用demo吧
支付宝可用demo下载地址
前段时间公司项目需要集成支付宝支付,蚂蚁金服的文档和demo可以说是非常清晰的,经过一些时间的摸索,也是把支付宝支付集成到了项目中。不可缺少的是去蚂蚁金服申请产品签约,这些就不多说了,按照文档一步一步来,应该是没有什么问题的。我们会得到下面几个参数

 // 商户PID
    public static final String PARTNER = "";
    // 商户收款账号
    public static final String SELLER = "";
    // 商户私钥,pkcs8格式
    public static final String RSA_PRIVATE = "";
    // 支付宝公钥 需要上传到ali
    public static final String RSA_PUBLIC = "";
准备工作做好了,接下来就是开发了。先把支付宝jar包导进去,然后需要在manifest注册一一下
 <activity
android:name="com.alipay.sdk.app.H5PayActivity"                  android:configChanges="orientation|keyboardHidden|navigation|screenSize"
android:exported="false"
android:screenOrientation="behind"            android:windowSoftInputMode="adjustResize|stateHidden" >
 </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" /> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

把支付宝demo中的类拷贝到自己的项目中
这五个类拷贝到自己的项目中
下一步就是通过线程调起支付了,请注意,这里签名都是在本地,私钥都是放在本地,实际开发中都是要在服务端完成的。

 /**
     * 支付宝支付异步任务
     * 
     * @author Simon
     */
    private class AliPayThread extends Thread {
        @Override
        public void run() {
            String result = AlipayAPI.pay(MainActivity.this, "测试的商品",
                    "测试商品的详细描述", "0.01");
            Message msg = new Message();
            msg.what = SDK_PAY_FLAG;
            msg.obj = result;
            mHandler.sendMessage(msg);
        }
    }

支付的结果

 private Handler mHandler=new Handler()
    {
         @Override
         public void handleMessage(Message msg) {
             switch (msg.what) {
             case SDK_PAY_FLAG: {
                 PayResult payResult = new PayResult((String) msg.obj);
                 /**
                  * 同步返回的结果必须放置到服务端进行验证(验证的规则请看https://doc.open.alipay.com/doc2/
                  * detail.htm?spm=0.0.0.0.xdvAU6&treeId=59&articleId=103665&
                  * docType=1) 建议商户依赖异步通知
                  */
                 String resultInfo = payResult.getResult();// 同步返回需要验证的信息

                 String resultStatus = payResult.getResultStatus();
                 // 判断resultStatus 为“9000”则代表支付成功,具体状态码代表含义可参考接口文档
                 if (TextUtils.equals(resultStatus, "9000")) {
                     Toast.makeText(MainActivity.this, "支付成功",
                             Toast.LENGTH_SHORT).show();
                 } else {
                     // 判断resultStatus 为非"9000"则代表可能支付失败
                     // "8000"代表支付结果因为支付渠道原因或者系统原因还在等待支付结果确认,最终交易是否成功以服务端异步通知为准(小概率状态)
                     if (TextUtils.equals(resultStatus, "8000")) {
                         Toast.makeText(MainActivity.this, "支付结果确认中",
                                 Toast.LENGTH_SHORT).show();
                     } else {
                         // 其他值就可以判断为支付失败,包括用户主动取消支付,或者系统返回的错误
                         Toast.makeText(MainActivity.this,
                                 "支付失败" + resultStatus, Toast.LENGTH_SHORT)
                                 .show();
                     }
                 }
                 break;
             }
             }
         };
    };

下面贴出整个代码

package com.alpha.alipay;


import com.ali.alipay.AlipayAPI;
import com.ali.alipay.PayResult;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;


public class MainActivity extends Activity {
    private static final int SDK_PAY_FLAG = 1;
    private Button button;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button=(Button) findViewById(R.id.bt_submit);
        button.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                new AliPayThread().start();
            }
        });
    }
    private Handler mHandler=new Handler()
    {
         @Override
         public void handleMessage(Message msg) {
             switch (msg.what) {
             case SDK_PAY_FLAG: {
                 PayResult payResult = new PayResult((String) msg.obj);
                 /**
                  * 同步返回的结果必须放置到服务端进行验证(验证的规则请看https://doc.open.alipay.com/doc2/
                  * detail.htm?spm=0.0.0.0.xdvAU6&treeId=59&articleId=103665&
                  * docType=1) 建议商户依赖异步通知
                  */
                 String resultInfo = payResult.getResult();// 同步返回需要验证的信息

                 String resultStatus = payResult.getResultStatus();
                 // 判断resultStatus 为“9000”则代表支付成功,具体状态码代表含义可参考接口文档
                 if (TextUtils.equals(resultStatus, "9000")) {
                     Toast.makeText(MainActivity.this, "支付成功",
                             Toast.LENGTH_SHORT).show();
                 } else {
                     // 判断resultStatus 为非"9000"则代表可能支付失败
                     // "8000"代表支付结果因为支付渠道原因或者系统原因还在等待支付结果确认,最终交易是否成功以服务端异步通知为准(小概率状态)
                     if (TextUtils.equals(resultStatus, "8000")) {
                         Toast.makeText(MainActivity.this, "支付结果确认中",
                                 Toast.LENGTH_SHORT).show();
                     } else {
                         // 其他值就可以判断为支付失败,包括用户主动取消支付,或者系统返回的错误
                         Toast.makeText(MainActivity.this,
                                 "支付失败" + resultStatus, Toast.LENGTH_SHORT)
                                 .show();
                     }
                 }
                 break;
             }
             }
         };
    };
    /**
     * 支付宝支付异步任务
     * 
     * @author Simon
     */
    private class AliPayThread extends Thread {
        @Override
        public void run() {
            String result = AlipayAPI.pay(MainActivity.this, "测试的商品",
                    "测试商品的详细描述", "0.01");
            Message msg = new Message();
            msg.what = SDK_PAY_FLAG;
            msg.obj = result;
            mHandler.sendMessage(msg);
        }
    }

}

运行下,就可以调起支付宝了。
支付宝付款页面
另外需要微信支付的可以看我的另一篇博客。多谢
Android微信支付

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AnjoyZhang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值