Android支付宝移动支付的实现

登陆www.alipay.com

注意的是账户必须是企业账户

登陆-》产品商店-》移动快捷支付-》在线签约条件

-》应用或其他附件-》上传文档(其他信息默认)

-》同意并提交-》等待审核

-》审核通过-》进入首页-》签约管理-》下载技术集成文档

-》导入alipay_lib与alipay_sdk_demo

 

打开alipay_sdk_demo目录中的Keys.java文件:

    public final class Keys{

       

        //合作身份者id,以2088开头的16位纯数字

        public static final String DEFAULT_PARTNER = "";//可在签约管理中的“查看PID|Key”获取

 

        //手快支付宝账号

        public static final String DEFAULT_SELLER = "";//企业账户的支付宝

 

        //商户私钥,自动生成

        public static final String PRIVATE = "";//运行下载SDK里的opessl,再按“生成命令.txt”文件提示操作即可生成一个私钥以及一个公钥,公钥要放在服务器中-》在签约管理中的“查看PID|Key”输入密码之后再在RAS(公钥)编辑框中复制进去提交即可。

 

        public static final String PUBLIC = "MIGFMA0GCSqGSIb3DQ...";//默认已有

 

    }

 

如果没有配置以上信息静 demon 将无法支付。支付是否成功可在logcat中查看,真实的数据可以在服务端的”卖出商品“中查看

 

具体实现可结合 demon 与 移动快捷支付应用集成接入包支付接口文档。

 

 

 

创建一个项目项目FNCT:

    导入alipay.jar包以及引用alipay_lib库,再把官方提供的Demon中的java文件除了ExternalPartner.java文件之外的必须文件都复制到我们的项目中

再把权限以及<activity>文件的配置复制过来。

 

在activity_main.xml中:

    <Button

        android:onClick="clickMonth"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:text="月费会员¥30/月"/>

    <Button

        android:onClick="clickYear"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:text="年费会员¥260/年"/>

 

在MainActivity.java文件中:

    public void clickMonth(View view){

        StringBuilder sb = new StringBuilder();

        sb.append("partner=\*");

        sb.append("Keys.DEFAULT_PARTNER");

        sb.append("\*&out_trade_no=\*");

        sb.append(getOutTradeNo());//用到的方法直接从demon中复制过来

        sb.append("\*&subject=\*");

        sb.append("月费会员");

        sb.append("\*&body=\*");

        sb.append("月费会员的内容");

        sb.append("\*&total_fee=\8");

        sb.append("0.01");//支付金额

        sb.append("\*&notify_url=\*");

 

        //网址需要做的URL编码

        sb.append(URLEncoder.encode("http://notify.java.jpxx.org/index.jsp"));

        sb.append("\*&service=\*mobile.securitypay.pay");

        sb.append("\*&_input_charset=\*UTF-8");

        sb.append("\*&return_url=\*");

        sb.append(URLEncoder.encode("http://m.alipay.com"));

        sb.append("\*&payment_type=\*1");

        sb.append("\*&seller_id=\*");

        sb.append(Keys.DEFAULT_SELLER);

 

        //如果show_url值为空看,可不转

        //sb.append("\*&show_url=\*");

        sb.append("\*&it_b_pay=\*1m");

        sb.append("\*");

 

        String info = sb.toString();

        String sign = Rsa.sign(info, Keys.PRIVATE);

 

        sign = URLEncoder.encode(sign);

        info += *&sign=\*" + sign + *\"&* + getSignType();//复制

 

        final String orderInfo = info;

 

        new Thread(){

            public void run(){

 

                Alipay aliPay = new AliPay(MainActivity.this, handler);

                String result = alipay.pay(orderInfo);

 

                Log.i(TAG, "result = " + result);

                Message msg = new Message();

                msg.what = RQF_PAY;

                msg.obj = result;

                handler.sendMessage(msg);

            }

        }.start();

    }

 

    Handler handler = new Handler(){

        public void handleMessage(android.os.Message msg){

            Result result = new Result((String) msg.obj);

 

            switch(msg.what){

                case RQF_PAY:

                case RQF_LOGIN:{

                    Toast.makeText(MainActivity.this, result.getResult(),

                        1).show();

                }

                    break;

                default:

                    break;

            }

        }

    }

 

    private static final String TAG = "FNCT";

    private static final int RQF_PAY = 1;

    private static final int RQF_LOGIN = 2;

 

posted @ 2015-11-04 23:25  飞牛冲天  阅读(376)  评论(0编辑  收藏  举报