支付宝APP支付集成文档

一、开发前提

适用于商家在App应用中集成支付宝支付功能。商家APP调用支付宝提供的SDK调用支付宝客户端内的支付模块,商家APP会跳转到支付宝中完成支付,支付完后跳回到商家APP内,最后展示支付结果。

本文档旨在指导开发者快速集成支付宝APP支付,包括开签约APP支付、服务器配置以及安卓端配置。

1、签约APP支付

APP要想接入支付宝支付功能需要签约支付宝的APP支付,签约要符合申请的条件,根据操作提示完成申请,等待审核通过即可

签约链接:https://b.alipay.com/signing/productScene.htm?sceneId=wysk&navKey=wysk

如图:

2、创建应用并获取APPID

然后创建应用,创建成功后即可获取到APPID创建应用地址:https://openhome.alipay.com/platform/appCreate.htm

如图:

3、添加功能

创建应用之后,还有给应用添加APP支付功能

如图:

勾选APP支付,确定即可

4、上线应用

根据提示提交审核,等待审核通过即可,注意:测试APP支付必须上线应用,因为沙箱测试不能测试APP支付,可能出现ALI40247错误,见链接:https://openclub.alipay.com/read.php?tid=250&fid=2https://support.open.alipay.com/support/hotProblemDetail.htm?spm=a219a.7386797.0.0.BZfVkv&id=259972

点击上线,按照提示完成操作即可,如图:

5、配置密钥

参考链接:https://doc.open.alipay.com/doc2/detail.htm?treeId=200&articleId=105310&docType=1

点击这里下载一键生成RSA密钥工具

生成之后,Java开发找到pkcs8格式的私钥签名,去除头尾、换行和空格,作为开发者私钥

将公钥去除头尾、换行和空格,填入如图所示的地方

填写之后,可以验证公钥的正确性, 根据图示操作即可:

6、了解业务流程

二、服务器配置

参考文档:https://doc.open.alipay.com/doc2/detail?treeId=54&articleId=103419&docType=1

1、下载SDK

服务器SDK有不同的开发语言版本,下载相应的版本,如图:

2、引入jar包

下面以java为例

集成支付宝接口需要引入的文件是:alipay-sdk-java*.jarcommons-logging-1.1.1.jar

若进一步了解代码实现请引入文件:alipay-sdk-java*-source.jarcommons-logging-1.1.1-sources.jar

3、调用示例

传入服务器创建订单所需参数参考文档:https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.Q48Wtz&treeId=193&articleId=105465&docType=1

参考事例代码:

//实例化客户端
AlipayClient client = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do",APP_ID,APP_PRIVATE_KEY,"json","GBK",ALIPAY_PUBLIC_KEY);
//实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay 
AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
//SDK已经封装掉了公共参数,这里只需要传入业务参数
//此次只是参数展示,未进行字符串转义,实际情况下请转义
request.setBizContent("  {
   	 "primary_industry_name":"IT科技/IT软件与服务",
   	 "primary_industry_code":"10001/20102",
   	 "secondary_industry_code":"10001/20102",
   	 "secondary_industry_name":"IT科技/IT软件与服务"
  }
");
AlipayTradeAppPayResponse response = client.execute(request); 
//调用成功,则处理业务逻辑
if(response.isSuccess()){
  	  //.....
}

三、Android端配置

参考文档:https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.rSXklx&treeId=193&articleId=105296&docType=1

1、下载SDK并导入

下载地址:https://doc.open.alipay.com/doc2/detail.htm?treeId=54&articleId=104509&docType=1下载后导入工程中

2、注册Activity并添加权限

<activity
    android:name="com.alipay.sdk.app.H5PayActivity"
    android:configChanges="orientation|keyboardHidden|navigation"
    android:exported="false"
    android:screenOrientation="behind">
</activity>
<activity
    android:name="com.alipay.sdk.auth.AuthActivity"
    android:configChanges="orientation|keyboardHidden|navigation"
    android:exported="false"
    android:screenOrientation="behind">
</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"/>

3、添加混淆规则

-libraryjars libs/alipaySDK-20150602.jar
-keep class com.alipay.android.app.IAlixPay{*;}
-keep class com.alipay.android.app.IAlixPay$Stub{*;}
-keep class com.alipay.android.app.IRemoteServiceCallback{*;}
-keep class com.alipay.android.app.IRemoteServiceCallback$Stub{*;}
-keep class com.alipay.sdk.app.PayTask{ public *;}
-keep class com.alipay.sdk.app.AuthTask{ public *;}

4、调用支付接口

需要在新线程中调用支付接口(可参考alipay_demo实现)获取PayTask支付对象调用支付(支付行为需要在独立的非ui线程中执行),代码示例:

final String orderInfo = info;   // 订单信息
Runnable payRunnable = new Runnable() {
    @Override
    public void run() {
        PayTask alipay = new PayTask(DemoActivity.this);
        String result = alipay.payV2(orderInfo,true);
        Message msg = new Message();
        msg.what = SDK_PAY_FLAG;
        msg.obj = result;
        mHandler.sendMessage(msg);
    }
};
 // 必须异步调用
Thread payThread = new Thread(payRunnable);
payThread.start();

5、支付结果获取和处理

(1)、同步返回

商户应用客户端通过当前调用支付的Activity的Handler对象,通过它的回调函数获取支付结果。(可参考alipay_demo实现)

private Handler mHandler = new Handler() {
    public void handleMessage(Message msg) {
        Result result = new Result((String) msg.obj);
        Toast.makeText(DemoActivity.this, result.getResult(), Toast.LENGTH_LONG).show();
    };
};

(2)、异步通知

商户需要提供一个http协议的接口,包含在请求支付的入参中,其key对应notify_url。 支付宝服务器在支付完成后,会以POST方式调用notify_url传输数据。

相关文章

Java 中的静态字段和静态方法

还记得我们写的第一个 Java 代码吗?public class Main { public static void main(String[] args) { System....

Java类中静态方法和静态变量,静态代码块,构造方法执行顺序

一,Java类执行顺序子类:ATest父类:AParentTest直接调用静态方法第一种:当直接调用(没有new对象)静态方法时候:父类静态变量(按照顺序)执行----->子类静态变量(按照顺序...

Java程序员必备技能:静态方法的正确使用姿势!

“静态方法是Java中的一种方法,它属于类而不是类的实例,这意味着你可以在不创建类的实例的情况下调用它,直接通过类名来访问,静态方法在内存中只有一份,无论该类被实例化多少次,它的静态方法都只有一份。”...

Java:什么是静态代理?什么是动态代理?二者有何区别?

推荐学习微服务架构秘籍:SpringCloud+SpringCloud Alibaba,全网疯传肝了30天,整出这份[分布式宝典:限流+缓存+通讯],秋招跳槽有望听说你很懂源码?Spring读懂了?还...

为何要在Java中使用静态类?

在Java中,static关键字可以被用于变量,类,代码块和方法。当我们使用static关键字去修饰它们之中的任何一个时,意味着这个指定的成员从属与这个类型本身。换言之, 一个静态成员被创建完成后可以...

Java的“泛型”特性,你以为自己会了?(万字长文)

使用Java的小伙伴,对于Java的一些高级特性一定再熟悉不过了,例如集合、反射、泛型、注解等等,这些可以说我们在平时开发中是经常使用到的,尤其是集合,基本是只要写代码没有用不到的,今天我们先来谈谈泛...