[置顶] Android开发App接入第三方支付宝支付功能(面试必问)
2018-03-28 19:52
691 查看
Android集成支付宝实现支付功能
android支付包括支付宝,微信,其他第三方整合支付等,只要我们耐心的阅读文档和开发简述,大家都会自己做出来,先来简单的讲解一下简介
支付宝快速接入连接 点击打开支付宝文档中连接 App支付文档中心
应用是开发者以软件形式向用户提供的特定场景或行业解决方案。具备开发能力的服务商入驻开放平台后,需要通过创建应用的方式接入蚂蚁各项产品(如当面付、开店、发券、服务窗、余利宝等)接口并进行开发,基于对行业及业务场景痛点的理解,创造能够满足市场需要的解决方案,以应用的形式服务用户。
开发者的应用供商家使用,需要商家对该应用进行授权,授权完成后开发者可以帮助商户完成相应的业务逻辑,例如代替商户发起当面付的收单请求。开发者可通过开放平台提供的邀请二维码或URL链接两种方式之一,引导商户在支付宝平台对应用授权;如应用中包含了需要商家进行签约的某项产品,开发者可根据商家需要发送签约链接引导商家前往蚂蚁金服相关平台自助提交材料签约。详见文档《应用使用》
应用创建及使用流程:
使用方法
第一步:如果是第一次使用支付宝,请先创建应用并获取APPID1.找到创建应用入口
2.然后创建名称
3.完成下面几步可以提交审核,时间大概需要一两天左右
4.基础信息, 功能选项:需要签约后功能才可以使用, 开发配置:基础环境以后再讲,接口加签方式 签名工具
用工具生成的公钥填入保存即可
5.最后提交审核,应用上限成功后,状态变为一上线,该状态下的应用能够调用生产环境的接口,预计一个工作日的审核时间
第二步:开发Demo
运行Demo
这是官方Demo下载地址
根据需求选择下载然后就可以查看效果了
导入jar
将demo里面的alipaySdk-20180223.jar拷贝到我们工程的libs下,并添加到依赖中
配置
修改Manifest
<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" />
<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> <activity android:name="com.alipay.sdk.app.H5AuthActivity" android:configChanges="orientation|keyboardHidden|navigation" android:exported="false" android:screenOrientation="behind" android:windowSoftInputMode="adjustResize|stateHidden" > </activity>
添加混淆规则
在商户应用工程的proguard-project.txt里添加以下相关规则:
-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 *;} -keep class com.alipay.sdk.app.H5PayCallback { <fields>; <methods>; } -keep class com.alipay.android.phone.mrpc.core.** { *; } -keep class com.alipay.apmobilesecuritysdk.** { *; } -keep class com.alipay.mobile.framework.service.annotation.** { *; } -keep class com.alipay.mobilesecuritysdk.face.** { *; } -keep class com.alipay.tscenter.biz.rpc.** { *; } -keep class org.json.alipay.** { *; } -keep class com.alipay.tscenter.** { *; } -keep class com.ta.utdid2.** { *;} -keep class com.ut.device.** { *;}
至此,开发包开发资源导入完成。
第三步:完整代码
/** 支付宝支付业务:入参app_id */ public static final String APPID = "2014100900013222"; /** 支付宝账户登录授权业务:入参pid值 */ public static final String PID = "2088501624560335"; /** 私钥优先使用 RSA2_PRIVATE */ public static final String RSA2_PRIVATE = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC98aoOKirBjPTKN4vLTi8vpYwWTLG6WJh701BnCl3C5gT3lQQGeXf+ZphXBwD9e3fRyJai9cpxiis7eUbonrqrmUoIvbyiAudoYpqnXVKTcaO/rSisr9aa7IOfMqFHEOS61nIlceJja2txCJfUNanS89aghMcvqHLcJ5m0YKN4cimbUUYPELMVI1PsCJyJUNKFiYorQq1/TWWqbvaKRaDRk8NHJgHsKtZFlyhbnm73NsP69NOdKvjQvTlLfpFZE+l8I61sy8Cz4V2E67bwJ2r9/G4f0FVt+F/U4YVegax4w8+w5Y55veazDJrm2gJ4abNk0EETZwyBLPgsbFR2/y3hAgMBAAECggEAe9iVQ7UUuaxZc3wyJvYsaAmtxGBvRYw8qAgJFZY5ujlWJcPAoyQSLAri62OCrsQRRPRf25MdU1h+hcG2jTfpiLdjAT4NPylbjsE0C0oa7E4dMX4K1kW0TMFHtMZDR93o9TWbqXSO4roIjOPIczImL4iTeYf5g8Z2VbtwSZ71FzNgmuAKLy7eobLfewXo1daqBe0ZDGk75RkQ2NR6cJmbLLMbBlTqAbQyBA8KIdue3gR5rruecgsdoMEEBnBPTrZ07U26l1+m3k2lHjE3EsztsQBMDp b638 UwdFKuq4kk7gRBXolj8zqYoKRiOVWy88bvPz8Vx8Vo6XGa0X0S/yBnM5t3kQKBgQDopuLxmxS/3MWcJsIKRYLKUlnWe/So0HbFsV6ij/So/8rfcWkzh9k+qnnSBHtvkQFsnv0+GLd1Hy8Wad9vCyFDessvhuzQRY2Imk9FotaTkYbrchrz0reJUYY6nUklyCTxEAz2UxyLLEIQO0JAhXH8S18YNuh6hVEphmKT2NxpbQKBgQDRAY8vGqJzvznIcCdXXoJx4Ic65dnPRwoEB1abQHnpYqmf8VH/Styk7By1Ap+luP7X3T6QX4gSR4RqC5krJBoz9nAsucgo+t9aUXrhLV83hOoKWD7znX/C1+0b/osRPoexlBmaaf+n+RNIQ3hxU9uIl6WHT01daBL4GVBanxchxQKBgES/e/R1JS6E6If6FADBBaMPrqhovKVd5JsKjLJw45VE8QgSFUo67IFOEu1ykZ8oNEmKub6twxiC/IEdC/9eRJgSIxSKRFRPGUGyh5ZGRi4ZJMtSTpCaRc34HzgW3lShzfjGC26GpLqje2oceLlkNYieJR2crBn4Z0FkCqExxgAJAoGBAMdW/2NjudE/bzMWlM8lmrBV/2RTWPvyu0DAZv/H7P6FVVbw6M3ebrb1YyPZDr8WxCjKISO9maAlictCqKGW2074GmDuCFPdgi04TUR667eeE0IujEv5yaLiIolyqtyVkQHzSMAXnPht/NANWdBstJOAXyXAov8VhhIOwq7L0VopAoGAeZBY2TXgCvvD/7sDQ8hQjxEI0IVORT35bGoNtSce2QDa9lG5cwXOn775TcAhCiWAmLexRKo+1Q/aYVAYTTB6ImEvE5DVb+3vz7a+1Wgw8yz+pijwabVRT0oggBYRWFyNRVjIrrwg3Tg5Me+P65/p64ztOhDotbQl6mtF0CshC44="; public static final String RSA_PRIVATE = ""; private static final int SDK_PAY_FLAG = 1;
@SuppressLint("HandlerLeak") private Handler mHandler = new Handler() { @SuppressWarnings("unused") public void handleMessage(Message msg) { switch (msg.what) { case SDK_PAY_FLAG: { @SuppressWarnings("unchecked") PayResult payResult = new PayResult((Map<String, String>) msg.obj); /** 对于支付结果,请商户依赖服务端的异步通知结果。同步通知结果,仅作为支付结束的通知。 */ String resultInfo = payResult.getResult();// 同步返回需要验证的信息 String resultStatus = payResult.getResultStatus(); // 判断resultStatus 为9000则代表支付成功 if (TextUtils.equals(resultStatus, "9000")) { // 该笔订单是否真实支付成功,需要依赖服务端的异步通知。 Toast.makeText(PayDemoActivity.this, "支付成功", Toast.LENGTH_SHORT).show(); } else { // 该笔订单真实的支付结果,需要依赖服务端的异步通知。 Toast.makeText(PayDemoActivity.this, "支付失败", Toast.LENGTH_SHORT).show(); } break; } default: break; } }; };
/** * 支付宝支付业务 * * @param v */ public void payV2(View v) { if (TextUtils.isEmpty(APPID) || (TextUtils.isEmpty(RSA2_PRIVATE) && TextUtils.isEmpty(RSA_PRIVATE))) { new AlertDialog.Builder(this).setTitle("警告").setMessage("需要配置APPID | RSA_PRIVATE") .setPositiveButton("确定", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialoginterface, int i) { // finish(); } }).show(); return; } /** * 这里只是为了方便直接向商户展示支付宝的整个支付流程;所以Demo中加签过程直接放在客户端完成; * 真实App里,privateKey等数据严禁放在客户端,加签过程务必要放在服务端完成; * 防止商户私密数据泄露,造成不必要的资金损失,及面临各种安全风险; * * orderInfo的获取必须来自服务端; */ boolean rsa2 = (RSA2_PRIVATE.length() > 0); Map<String, String> params = OrderInfoUtil2_0.buildOrderParamMap(APPID, rsa2); String orderParam = OrderInfoUtil2_0.buildOrderParam(params); String privateKey = rsa2 ? RSA2_PRIVATE : RSA_PRIVATE; String sign = OrderInfoUtil2_0.getSign(params, privateKey, rsa2); final String orderInfo = orderParam + "&" + sign; Runnable payRunnable = new Runnable() { @Override public void run() { PayTask alipay = new PayTask(PayDemoActivity.this); Map<String, String> result = alipay.payV2(orderInfo, true); Log.i("msp", result.toString()); Message msg = new Message(); msg.what = SDK_PAY_FLAG; msg.obj = result; mHandler.sendMessage(msg); } }; Thread payThread = new Thread(payRunnable); payThread.start(); }
以上测试代码都在github上,官方的下载的最新sdk包也在该仓库的lib目录里
相关文章推荐
- [置顶] 【Android】Android开发初学者实现拨打电话的功能,拨打电话app小demo实现
- [置顶] 【Android】Android开发启动app弹出一张广告图片,Dialog可以查看大图,查看某个图片功能
- Android app支付功能开发
- [置顶] Android开发之清除缓存功能实现方法,可以集成在自己的app中,增加一个新功能。
- Android开发微信APP支付功能的要点小结
- Android开发:app工程集成银联支付功能(服务器端)
- Android app 第三方支付宝支付接入
- Android app第三方支付宝支付接入教程
- Android开发:app工程集成银联支付功能(客户端)
- Android开发:app工程集成银联支付功能(服务器端)
- [置顶]Android 项目开发 基于Web Service 服务的中英翻译软件(一)功能介绍
- android开发游记:APP自动更新功能的快速集成和实现方法讲解
- [置顶] Android 百度地图开发--- 导航功能输入起始地址实现导航,地址解析与反解析的使用
- Android App支付系列(一):微信支付接入详细指南(附官方支付demo)
- Android 个人开发者接入支付功能
- [置顶] Android开发工程师面试题总结。android开发面试经验
- android app 快速接入银联支付流程(android studio版)