Ping++是为移动开发者解决支付接入问题的平台,移动开发者只需一次性接入Ping++的SDK,即可快速完成当前主流的支付渠道接入,并定制自己的支付系统。
那么如何在自己的APP中使用ping++呢? 请往下看~
首先 咱们先要现在人家提供的SDK(client-sdk)倒入到咱们的开发环境下,然后关联到咱们的项目中。
下面我们要添加一些 依赖包 这个可以去 官方给的 地址去下载 并导入到咱们的项目里面的libs目录下,如果是AndroidStudio的话,要讲so文件请添加到jniLibs目录中)然后将lib/assets目录下的data.bin添加到项目工程的assets下面。
Ok 添加完了这些呢 咱们要进行下一步的添加就是所谓的权限
千万不要少加!
完成这步以后,接下来咱们要注册Activity
android:configChanges="orientation|screenSize"
android:launchMode="singleTop"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
android:exported="true"
android:targetActivity="com.pingplusplus.android.PaymentActivity" />
android:configChanges="orientation|keyboardHidden|navigation"
android:exported="false"
android:screenOrientation="behind" >
android:configChanges="orientation|keyboardHidden|navigation"
android:exported="false"
android:screenOrientation="behind" >
android:configChanges="keyboardHidden|navigation|orientation|screenSize"
android:excludeFromRecents="true"
android:exported="false"
android:theme="@style/EbpayThemeActivityWelcome"
android:windowSoftInputMode="stateHidden" />
android:configChanges="keyboardHidden|navigation|orientation|screenSize"
android:excludeFromRecents="true"
android:exported="@bool/bd_wallet_switch_global_debug"
android:screenOrientation="portrait"
android:theme="@style/EbpayThemeActivityWelcome"
android:windowSoftInputMode="stateHidden" />
android:configChanges="keyboardHidden|navigation|orientation|screenSize"
android:excludeFromRecents="true"
android:exported="@bool/bd_wallet_switch_global_debug"
android:hardwareAccelerated="false"
android:screenOrientation="portrait"
android:theme="@style/EbpayThemeActivit"
android:windowSoftInputMode="stateHidden" />
android:configChanges="keyboardHidden|navigation|orientation|screenSize"
android:excludeFromRecents="true"
android:exported="@bool/bd_wallet_switch_global_debug"
android:screenOrientation="portrait"
android:theme="@style/EbpayThemeActivit"
android:windowSoftInputMode="stateHidden" />
android:configChanges="keyboardHidden|navigation|orientation|screenSize"
android:excludeFromRecents="true"
android:exported="@bool/bd_wallet_switch_global_debug"
android:screenOrientation="portrait"
android:theme="@style/EbpayThemeActivit"
android:windowSoftInputMode="stateVisible" />
android:configChanges="keyboardHidden|navigation|orientation|screenSize"
android:excludeFromRecents="true"
android:exported="@bool/bd_wallet_switch_global_debug"
android:screenOrientation="portrait"
android:theme="@style/EbpayThemeActivit"
android:windowSoftInputMode="stateVisible" />
android:configChanges="keyboardHidden|navigation|orientation|screenSize"
android:excludeFromRecents="true"
android:exported="@bool/bd_wallet_switch_global_debug"
android:theme="@style/EbpayThemeActivit"
android:windowSoftInputMode="stateVisible" />
android:configChanges="keyboardHidden|navigation|orientation|screenSize"
android:excludeFromRecents="true"
android:exported="@bool/bd_wallet_switch_global_debug"
android:screenOrientation="portrait"
android:theme="@style/EbpayThemeActivitTranslucent"
android:windowSoftInputMode="stateVisible|adjustResize" />
android:configChanges="keyboardHidden|navigation|orientation|screenSize"
android:excludeFromRecents="true"
android:exported="@bool/bd_wallet_switch_global_debug"
android:screenOrientation="portrait"
android:theme="@style/EbpayThemeActivitTranslucent"
android:windowSoftInputMode="stateHidden" />
android:configChanges="keyboardHidden|navigation|orientation|screenSize"
android:excludeFromRecents="true"
android:exported="@bool/bd_wallet_switch_global_debug"
android:screenOrientation="portrait"
android:theme="@style/EbpayThemeActivit"
android:windowSoftInputMode="stateHidden" />
android:configChanges="keyboardHidden|navigation|orientation|screenSize"
android:excludeFromRecents="true"
android:exported="@bool/bd_wallet_switch_global_debug"
android:launchMode="singleTask"
android:screenOrientation="portrait"
android:theme="@style/EbpayThemeActivit"
android:windowSoftInputMode="stateHidden" />
android:configChanges="keyboardHidden|navigation|orientation|screenSize"
android:excludeFromRecents="true"
android:exported="@bool/bd_wallet_switch_global_debug"
android:launchMode="singleTask"
android:screenOrientation="portrait"
android:theme="@style/EbpayThemeActivit"
android:windowSoftInputMode="stateVisible|adjustPan" />
android:configChanges="keyboardHidden|navigation|orientation|screenSize"
android:excludeFromRecents="true"
android:exported="@bool/bd_wallet_switch_global_debug"
android:launchMode="singleTask"
android:screenOrientation="portrait"
android:theme="@style/EbpayThemeActivit"
android:windowSoftInputMode="stateVisible|adjustPan" />
android:configChanges="keyboardHidden|navigation|orientation|screenSize"
android:excludeFromRecents="true"
android:exported="@bool/bd_wallet_switch_global_debug"
android:launchMode="singleTask"
android:screenOrientation="portrait"
android:theme="@style/EbpayThemeActivit"
android:windowSoftInputMode="stateVisible|adjustPan" />
android:configChanges="keyboardHidden|navigation|orientation|screenSize"
android:excludeFromRecents="true"
android:exported="@bool/bd_wallet_switch_global_debug"
android:screenOrientation="portrait"
android:theme="@style/EbpayThemeActivit"
android:windowSoftInputMode="adjustResize" />
android:configChanges="keyboardHidden|navigation|orientation|screenSize"
android:excludeFromRecents="true"
android:exported="@bool/bd_wallet_switch_global_debug"
android:screenOrientation="portrait"
android:theme="@style/EbpayThemeActivit"
android:windowSoftInputMode="stateHidden" />
android:configChanges="keyboardHidden|navigation|orientation|screenSize"
android:excludeFromRecents="true"
android:exported="@bool/bd_wallet_switch_global_debug"
android:hardwareAccelerated="false"
android:theme="@style/EbpayThemeActivit"
android:windowSoftInputMode="stateHidden" >
关键的一步操作来了 就是获取charge
charge 对象是一个包含支付信息的json对象,是 ping++ SDK 发起支付的必须的参数。该参数需要请求用户服务器获得,服务端生成charge的方式参考ping++ 官方文档,地址 https://pingxx.com/guidance/server/import。 sdk 中的 demo 里面提供了如何获取 charge 的实例方法,供用户参考。
这些工作准备好以后那么咱们就可以发起支付了
发起支付
Intent intent = new Intent();
String packageName = getPackageName();
ComponentName componentName = new ComponentName(packageName, packageName + ".wxapi.WXPayEntryActivity");
intent.setComponent(componentName);
intent.putExtra(PaymentActivity.EXTRA_CHARGE, charge);
startActivityForResult(intent, REQUEST_CODE_PAYMENT);
说明: 上述发起方式是 Ping++ client-sdk 唯一公开调用方式, “.wxapi.WXPayEntryActivity“ 是所有渠道支付的入口,并非只是微信支付入口。
五、获取支付状态
从 Activity 的 onActivityResult 方法中获得支付结果。支付成功后,用户服务器也会收到ping++ 服务器发送的异步通知。 最终支付成功请根据服务端异步通知为准。
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//支付页面返回处理
if (requestCode == REQUEST_CODE_PAYMENT) {
if (resultCode == Activity.RESULT_OK) {
String result = data.getExtras().getString("pay_result");
/* 处理返回值
* "success" - payment succeed
* "fail" - payment failed
* "cancel" - user canceld
* "invalid" - payment plugin not installed
*/
String errorMsg = data.getExtras().getString("error_msg"); // 错误信息
String extraMsg = data.getExtras().getString("extra_msg"); // 错误信息
showMsg(result, errorMsg, extraMsg);
}
}
}
注意事项
Android 不允许再 UI 线程中进行网络请求,所以请求 charge 对象的时候请使用 thread+handler 或者使用 AsyncTask 。example 里面的示例程序使用的就是 AsyncTask 方式请求 charge 对象。
关于定制
用户可以根据需求自行定制一个或者多个支付渠道。但是定制 sdk 的时候需要注意以下几点
1、libpingpp.jar 、libammsdk.jar 这两个 jar 包是必须的。
其中 libpingpp.jar 是 ping++ SDK 的核心类。libammsdk.jar 是微信支付的核心类。因为微信支付方式要求比较特殊,所以无法从 ping++ SDK 中彻底剔除微信支付所需的 libammsdk.jar
2、PaymentActivity 和 .wxapi.WXPayEntryActivity 必须在 AndroidManifest.xml 文件里面声明。
android:launchMode="singleTop"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
android:exported="true"
android:targetActivity="com.pingplusplus.android.PaymentActivity" />
3、权限
1、微信支付渠道是通过向“微信“客户端发起请求进行支付的,要求手机必须安装微信。如果没有安装微信,ping++ sdk 会在支付结果中给予通知。不需要额外权限。
2、银联支付渠道是通过“银联手机支付服务“进行支付的,要求手机必须安装“银联手机支付服务”。如果没有安装,ping++ sdk 会在支付结果中给予提示。不需求额外权限。
3、支付宝、微信等渠道,需要的权限为
4、百度支付渠道,需要额外添加权限
4、依赖包
1、微信支付依赖包: libammsdk.jar
2、百度支付依赖包: bdwallet_pay_sdk 工程
3、银联支付依赖包: UPPayAssisEx.jar 、 UPPayPluginExStd.jar、android-support-v4.jar
4、支付宝支付依赖包: alipaySDK-xxxxxxxx.jar
5、注册activity
用户如果选择不适用某种渠道,可以把该渠道的 Activity 从 AndroidManifest.xml 里面删除。
需要注意的是,如果用户不适用微信支付,可以删除。
android:exported="true"
android:targetActivity="com.pingplusplus.android.PaymentActivity" />
这时支付的调用接口需要改为:
Intent intent = new Intent(MainActivity.this,PaymentActivity.class);
intent.putExtra(PaymentActivity.EXTRA_CHARGE, data);
startActivityForResult(intent, REQUEST_CODE_PAYMENT);
混淆设置
用户进行 apk 混淆打包的时候,为了不影响 pingpp sdk 以及渠道 sdk 的使用,请在 proguard-rules 中添加一下混淆规则。
-dontwarn com.alipay.**
-keep class com.alipay.** {*;}
-dontwarn com.ta.utdid2.**
-keep class com.ta.utdid2.** {*;}
-dontwarn com.ut.device.**
-keep class com.ut.device.** {*;}
-dontwarn com.tencent.**
-keep class com.tencent.** {*;}
-dontwarn com.unionpay.**
-keep class com.unionpay.** {*;}
-dontwarn com.pingplusplus.**
-keep class com.pingplusplus.** {*;}
-dontwarn com.baidu.**
-keep class com.baidu.**{*;}
-keepclassmembers class * {
@android.webkit.JavascriptInterface
}
好了 以上就是详细操作了,不足的地方大家多指教,祝大家生活愉快~