功能的集成步骤在本页面第二,请往下翻,相关问题在一;
一、相关问题:
1、导入官方项目时,不能像常规那样导入项目时,删掉一些文件夹,更改文件中版本,什么都不改,直接打开即
可。错误时,android studio会报错:android studio error: style attribute ‘@android:attr/windowEnterAnimation’
n,什么都不改就可以了。
2、android studio CreateProcess error=2, 系统找不到指定的文件。
解决方法:打开 local.properties,将ndk目录的目录加上后缀 .cmd, 即:ndk.dir=E\:\\android\\sdk\\ndk-bundle.cmd, 重新build就
可以正常编译了,没有出现的,那也是可以的
如图:
3、Program type already present: android.support.v4.app.BackStackState$1
这个问题是因为我自己操作错误,我是一边把:pingpp,pingpp_ui文件夹导入项目中,又一边加依赖:
compile 'com.pingxx:pingpp-core:2.1.17' // (Ping++ 标准版 SDK) 必须添加
compile 'com.pingxx:pingpp-ui:2.1.17' // (Ping++ UI 控件) 使用 Ping++ UI 时添加
如果有过文件夹导入的过程,就重新写个demo,这个时候别加入pingpp,pingpp_ui文件夹,直接添加依赖即可:
compile 'com.pingxx:pingpp-core:2.1.17' // (Ping++ 标准版 SDK) 必须添加
compile 'com.pingxx:pingpp-ui:2.1.17' // (Ping++ UI 控件) 使用 Ping++ UI 时添加
4、error: style attribute ‘@android:attr/windowEnterAnimation’ not found.
这个坑是因为android studio版本问题,导致的方式不一样,
解决:在gradle.properties中,加上
android.enableAapt2=false
加上后会出现一些问题,比如:在relativelayout中,android:layout_toLeftOf="@id/"的控制命令会报错,如果不想加这一句,那就先删掉 “ compile ‘com.pingxx:pingpp-ui:2.1.17’ // (Ping++ UI 控件) 使用 Ping++ UI 时添加”这个依赖,这个不影响创建定单的。
贴上图,清晰一些
这几个坑,够我吃的了。大家小心。
二、集成步骤
android根据官方文档集成,地址:https://www.pingxx.com/docs/client/android
然后一步步的来,我项目里直接是
2.1、依赖,
dependencies {
implementation ‘com.pingxx:pingpp-android:2.2.1’ // (Ping++ 标准版 SDK) 必须添加
implementation ‘com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+’ // 使用微信支付时添加,具体版本参考微信官方文档
implementation ‘com.pingxx:pingpp-android-alipay:2.2.0’ // 使用支付宝时添加
implementation ‘com.pingxx:pingpp-android-upacp:2.2.0’ // 使用银联支付时添加
implementation ‘com.pingxx:pingpp-qpay:2.1.19’ // 使用QQ钱包时添加
implementation ‘com.pingxx:pingpp-cmbwallet:2.1.19’ // 使用招行一网通时添加
implementation ‘com.pingxx:pingpp-ccbpay:2.1.19’ // 使用建行支付时添加
}
2.2、再是权限
2.3、然后是Mainifest.xml
<!-- Ping++ SDK -->
<activity
android:name="com.pingplusplus.android.PaymentActivity"
android:configChanges="orientation|keyboardHidden|navigation|screenSize"
android:launchMode="singleTop"
android:theme="@android:style/Theme.Translucent.NoTitleBar" >
<!-- 不使用QQ钱包,可删除此部分代码 -->
<!-- scheme 填写规则建议:qwallet + QQ 钱包中的 app_id -->
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.BROWSABLE"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="qwalletXXXXXXXX"/>
</intent-filter>
</activity>
<!-- 微信支付 -->
<!-- 1.需要将以下"替换成自己 APK 的包名"换成在微信平台上注册填写的包名 -->
<!-- 2.WxPayEntryActivity 这个类在 SDK 内部实现,开发者不需要额外实现该类 -->
<activity-alias
android:name="替换成自己APK的包名.wxapi.WXPayEntryActivity"
android:exported="true"
android:targetActivity="com.pingplusplus.android.PaymentActivity" />
<!-- 支付宝 -->
<activity
android:name="com.alipay.sdk.app.H5PayActivity"
android:configChanges="orientation|keyboardHidden|navigation|screenSize"
android:exported="false"
android:screenOrientation="behind" >
</activity>
<activity
android:name="com.alipay.sdk.auth.AuthActivity"
android:configChanges="orientation|keyboardHidden|navigation|screenSize"
android:exported="false"
android:screenOrientation="behind" >
</activity>
<!-- 银联支付 -->
<activity
android:name="com.unionpay.uppay.PayActivity"
android:configChanges="orientation|keyboardHidden|navigation|screenSize"/>
<activity
android:name="com.unionpay.UPPayWapActivity"
android:configChanges="orientation|keyboardHidden|navigation|screenSize"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize"/>
<!-- 招行一网通(非混淆加密方式) -->
<service android:name="cmb.pb.cmbsafe.CmbService" android:exported="false"/>
<activity
android:name="cmb.pb.ui.PBKeyboardActivity"
android:theme="@style/CmbDialogStyleBottom" />
<!-- 招行一网通 App 即招商银行(格式:`<SCHEME>://pingppcmbwallet`,其中 `<SCHEME>` 是你自定义的 `URL Schemes`) -->
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.BROWSABLE"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="自定义 URL Scheme"/>
<data android:host="pingppcmbwallet"/>
</intent-filter>
<!-- 将以上代码添加到 Ping++ SDK 注册的 Activity,如: -->
<activity
android:name="com.pingplusplus.android.PaymentActivity"
android:configChanges="orientation|keyboardHidden|navigation|screenSize"
android:launchMode="singleTask"
android:theme="@android:style/Theme.Translucent.NoTitleBar" >
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.BROWSABLE"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="自定义 URL Scheme"/>
<data android:host="pingppcmbwallet"/>
</intent-filter>
</activity>
<!-- 建行支付需注册 (自定义 action-name 保持与服务端的 third_app_info 一致) -->
<activity android:name="com.ccb.ccbnetpay.activity.appresult.ResultActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="自定义 action-name"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
<activity android:name="com.ccb.ccbnetpay.activity.CcbUnionPayActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait"/>
<activity android:name="com.ccb.ccbnetpay.activity.CcbH5PayActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait"/>
2.4、然后就可以调用了。
这是创建定单:
//参数一:Activity 当前调起支付的Activity
//参数二:data 获取到的 Charge/Order/Recharge 的 JSON 字符串
Pingpp.createPayment(YourActivity.this, data);
然后是支付的回调监听:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//支付页面返回处理
if (requestCode == Pingpp.REQUEST_CODE_PAYMENT) {
if (resultCode == Activity.RESULT_OK) {
String result = data.getExtras().getString("pay_result");
/* 处理返回值
* "success" - 支付
* 成功
* "fail" - 支付失败
* "cancel" - 取消支付
* "invalid" - 支付插件未安装(一般是微信客户端未安装的情况)
* "unknown" - app进程异常被杀死(一般是低内存状态下,app进程被杀死)
*/
String errorMsg = data.getExtras().getString("error_msg"); // 错误信息
String extraMsg = data.getExtras().getString("extra_msg"); // 错误信息
showMsg(result, errorMsg, extraMsg);
}
}
}
// 注:线下渠道无支付结果返回, 返回 unknown 字段。需要从服务端获取正确的支付结果。
结束了,
//这里再加一点,发现一个问题,如果 “implementation 'com.pingxx:pingpp-android-alipay:2.2.0' // 使用支付宝时添加
”依赖添加不上,那就按如下操作:(暂时只写支付宝功能,因为它出问题了)
1、依赖
implementation 'com.pingxx:pingpp-android:2.2.1' // (Ping++ 标准版 SDK) 必须添加
下载ping++支付宝的sdk:https://github.com/PingPlusPlus/pingpp-android/tree/master/lib/pingpp/libs,
这个是libs的直接路径,直接找到:alipaySdk-20180316.jar下载即可,放到自己工程的lib文件夹下,
可到android studio面板粘贴,也可文件夹去粘贴;然后添加依赖;
2、mianifast.xml配置:
<!-- 注:有些权限是需要动态注册的,如 READ_PHONE_STATE 权限 -->
<!-- 通用权限 -->
<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"/>
<!-- 银联需要的权限 -->
<uses-permission android:name="android.permission.NFC"/>
<!-- 支付宝 sdk -->
<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>
<!-- Ping++ SDK -->
<activity
android:name="com.pingplusplus.android.PaymentActivity"
android:configChanges="orientation|keyboardHidden|navigation|screenSize"
android:launchMode="singleTop"
android:theme="@android:style/Theme.Translucent.NoTitleBar" >
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.BROWSABLE"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="qwalletXXXXXXXX"/>
</intent-filter>
</activity>
<!-- 微信支付 sdk ,也是 Ping++ sdk 调用入口 -->
<activity-alias
android:name=".wxapi.WXPayEntryActivity"
android:exported="true"
android:targetActivity="com.pingplusplus.android.PaymentActivity" />
3、直接调用 Pingpp.createPayment(MainActivity.this,charge);即可