Git Product home page Git Product logo

pingpp-android's Introduction

Ping++ Android SDK

目录

简介

lib 目录包含 Library Project: pingpp
可以直接将两个 Library Project 作为依赖库,导入到你的项目。支持 Android Studio。
example 文件夹里面是一个简单的接入示例,该示例仅供参考。想使用该示例,请直接将本仓库导入。
docs 目录里面是 Android SDK 的接入指南。

  • 推荐使用 Gradle 方式,本项目的库文件更新可能有延迟。

版本要求

Android SDK 要求 Android 4.1 及以上版本
请使用 Java 8 或以上版本

需要 Kotlin 标准库

额外说明

  1. 中间页说明

快速体验

Android Studio

导入 pingpp-android 整个项目,即可运行该 demo。

需要注意: 测试微信支付,需要签名和包名与微信开放平台上的一致,才可支付成功。给出的 demo 并没给出正确的签名,会返回微信支付失败的结果。
导入 demo 中可能会遇到的开发环境版本问题,修改 build.gradle 中的版本

工程配置及使用

一、导入依赖包

(注:依赖渠道 SDK 时,可能会和其他第三方SDK有冲突,移除依赖冲突的包就可以。如:问题二问题三)

Gradle 导入方式

修改项目的 build.gradle 文件,添加 bintray 仓库地址

allprojects {
    repositories {
        // ...其他仓库地址...
        mavenCentral()
        // maven {
        //     url "https://maven.aliyun.com/repository/jcenter"
        // }

        // 本地 aar 目录,根据实际 aar 放置的目录修改 dirs 中内容。以下为当前项目的示例
        flatDir {
            dirs(
                project(":lib:pingpp").file("libs")
            )
        }
    }
}
dependencies {
    implementation 'com.pingxx:pingpp-android:2.3.6' // (Ping++ 标准版 SDK) 必须添加
    implementation 'com.tencent.mm.opensdk:wechat-sdk-android:6.8.26' // 使用微信支付时添加,具体版本参考微信官方文档
    implementation "com.alipay.sdk:alipaysdk-android:15.8.17" // 使用支付宝时添加。可参考 https://opendocs.alipay.com/open/04km1h
    implementation "com.pingxx:pingpp-android-upacp:3.5.9" // 使用银联支付时添加
    implementation 'com.pingxx:pingpp-qpay:2.1.19' // 使用QQ钱包时添加
    implementation 'com.pingxx:pingpp-android-cmbwallet:1.1.1' // 使用招行一网通时添加
    implementation 'com.pingxx:pingpp-ccbpay:2.1.19' // 使用建行支付时添加
    implementation 'com.pingxx:pingpp-android-cmpay:2.2.2' // 使用和包支付时添加
    implementation 'com.pingxx:pingpp-android-lakala:2.0.0' // 使用拉卡拉支付时添加
}

微信 SDK

Maven 导入方式

<dependency>
  <groupId>com.pingxx</groupId>
  <artifactId>pingpp-android</artifactId>
  <!--请将 VERSION 换成 SDK 对应的版本号-->
  <version>VERSION</version>
  <type>pom</type>
</dependency>

二、清单文件配置所需权限

缺少时或者需要覆盖时可按下述说明添加

(注:有些权限是需要动态注册的,如 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"/>

三、使用 Ping++ 标准版 SDK

1. 清单文件注册相关类

  • Ping++ SDK 所需要注册

已默认包含于 aar 文件中,如果不需要自定义,可以忽略。

<activity
    android:name="com.pingplusplus.android.PaymentActivity"
    android:configChanges="orientation|keyboardHidden|navigation|screenSize"
    android:launchMode="singleTop"
    android:theme="@android:style/Theme.Translucent.NoTitleBar" >
</activity>
  • 微信支付需要注册 注:
    1. 需要将以下“替换成自己 APK 的包名”换成在微信平台上注册填写的包名
    2. WxPayEntryActivity 这个类在 SDK 内部实现,开发者不需要额外实现该类
<activity-alias
    android:name="替换成自己 APK 的包名.wxapi.WXPayEntryActivity"
    android:exported="true"
    android:targetActivity="com.pingplusplus.android.PaymentActivity" />
  • 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>

将以上代码添加到 Ping++ SDK 注册的 Activity,如:

<activity
    android:name="com.pingplusplus.android.PaymentActivity">

    <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="qwallet1234567890"/>
    </intent-filter>
</activity>
  • 招行一网通 app 需注册 scheme
<intent-filter>
   <action android:name="android.intent.action.VIEW"/>
   <category android:name="android.intent.category.DEFAULT"/>
   <data android:scheme="招行分配的 scheme"/>
</intent-filter>

将以上代码添加到 Ping++ SDK 注册的 Activity,如:

<activity
    android:name="com.pingplusplus.android.PaymentActivity">

    <intent-filter>
        <action android:name="android.intent.action.VIEW"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <data android:scheme="招行分配的 scheme"/>
    </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" />
  • 使用拉卡拉微信(wx_app_lakala)需要添加声明
<activity
    android:name="com.swwx.paymax.PaymentActivity"
    android:launchMode="singleTask"
    android:theme="@android:style/Theme.Translucent.NoTitleBar" />

<activity-alias
    android:name="${applicationId}.wxapi.WXEntryActivity"
    android:exported="true"
    android:targetActivity="com.swwx.paymax.PaymentActivity" />

2. 获取到 charge/order 后,调起支付

获取 charge/order

charge/order 对象是一个包含支付信息的 JSON 对象,是 Ping++ SDK 发起支付的必要参数。该参数需要请求用户服务器获得,服务端生成 charge 或 order 的方式参考 服务端接入简介。SDK 中的 demo 里面提供了如何获取 charge/order 的实例方法,供用户参考。

调起支付

因为 Ping++ 已经封装好了相应的调用方法,所以只需要调用支付方法即可调起支付控件:
(注:该调用方法需要在主线程(UI 线程)完成)

// 参数一:Activity  当前调起支付的 Activity
// 参数二:data  获取到的 charge 或 order 的 JSON 字符串
Pingpp.createPayment(YourActivity.this, data);

3. 获取支付结果

从 Activity 的 onActivityResult 方法中获得支付结果。支付成功后,用户服务器也会收到 Ping++ 服务器发送的异步通知。 (最终支付成功请根据服务端异步通知为准)

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // 支付页面返回处理
    if (requestCode == Pingpp.REQUEST_CODE_PAYMENT) {
       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"); // 错误信息
    }
}

// 注:线下渠道无支付结果返回, 返回 unknown 字段。需要从服务端获取正确的支付结果。

4. 其他辅助方法及变量

1. 判断是否安装了招商银行客户端
// isInstalled   true: 已安装    false: 未安装
boolean isInstalled = Pingpp.isCmbWalletInstalled(context);
2. 是否允许使用手机 Pay
// true: 允许 (默认)   false: 不允许
Pingpp.useSEPay(false);
3. 控制招行支付方式
// 自动判断,安装有招行 app 时打开 app 支付,否则通过 webView 打开 H5 页面支付
Pingpp.setCmbPayMethod(CmbPayMethod.AUTO);
// 仅通过 webView 打开 H5 页面支付
Pingpp.setCmbPayMethod(CmbPayMethod.H5_ONLY);
// 仅通过打开招行 app 支付
Pingpp.setCmbPayMethod(CmbPayMethod.APP_ONLY);
3. 设置招行 H5 地址

生产环境不需要设置

// 参数 1,Boolean,是否启用招行测试地址;
// 参数 2,String,招行测试 H5 地址。仅参数 1 为 true 时生效。如果参数 2 传 null,则会使用默认测试地址。
Pingpp.setCmbEnv(true, null);
Pingpp.setCmbEnv(true, "https://...");

5. 调起签约接口

// 参数一:Activity  当前调起支付的Activity
// 参数二:data  获取到的 agreement 的 JSON 字符串
Pingpp.signAgreement(YourActivity.this, data);
获取签约结果

签约结果不会在客户端返回,商户需要自己在前端查询服务端的 agreement 对象状态。

混淆设置

使用 aar/jcenter 方式导入的不需要额外设置混淆。

(注:将以下对应渠道的混淆代码加到主 module 以及该 SDK 依赖所在的 module 中,不然会出现 jar 包重复或者找不到该类的问题,如:问题二)

# Ping++ 混淆过滤
-dontwarn com.pingplusplus.**
-keep class com.pingplusplus.** {*;}
-keep public class com.pingplusplus.android.Pingpp$CmbPayMethod {
    *;
}

# 支付宝混淆过滤
-dontwarn com.alipay.**
-keep class com.alipay.** {*;}

# 微信或 QQ 钱包混淆过滤
-dontwarn  com.tencent.**
-keep class com.tencent.** {*;}

# 银联支付混淆过滤
-dontwarn  com.unionpay.**
-keep class com.unionpay.** {*;}

# 内部 WebView 混淆过滤
-keepclassmembers class * {
    @android.webkit.JavascriptInterface <methods>;
}

日志开关

SDK 提供了日志功能,默认日志为关闭状态。 开发者可以通过下面设置打开日志开关。通过 PING++ 来对日志进行筛选。

//开启调试模式
Pingpp.enableDebugLog(true);

注意事项

  • Pingpp Android SDK 可能会与友盟、百度地图等其他第三方 jar 包冲突,当同时使用这些 jar 包的时候用户需要根据情况判断保留哪一方的 jar 包。
  • 请勿直接使用客户端支付结果作为最终判定订单状态的依据,由于 Ping++ 没有参与你的客户端和第三方渠道的交互,无法保证客户端支付结果的安全性,建议订单状态的更新对比客户端的渠道同步回调信息和服务端的 Ping++ Webhooks 通知来确定是否修改。

常见问题

问题一: 微信支付失败,返回 wx_err_code:-1

  • 报错原因: 微信验证 apk 的签名包名失败。
  • 解决方案:
    1. 项目的 package 名字、AndroidManifest.xml 里面的包名,必须和微信开放平台注册的一致;
    2. 必须打包成为发布版本的 apk,apk 签名必须和在微信开放平台注册的一致,微信开放平台签名要求: MD5,无冒号;
    3. 清理微信缓存;
    4. 如果签名包名均正确,仍旧返回 -1 报错,请检查时间戳格式是否有问题或重置微信开放平台的安卓版本的签名包名。

问题二:与其他第三方SDK有冲突(如:友盟SDK)

  • 报错Log:
Error:Execution failed for task ':app:transformClassesWithJarMergingForDebug'.
com.android.build.api.transform.TransformException:
java.util.zip.ZipException: duplicate entry: a/a/a/a.class
  • 报错原因:

    1. 没有加过滤混淆的代码
    2. 有重复的 jar 包存在
  • 解决方案:

    1. 加上混淆过滤的代码(出现 a/a/a/a.class 的 log 时)
    2. 删除重复的 jar 包(可以是第三方 SDK 中的,也可以是 Ping++ SDK 中的 jar 包)

问题三:Ping++ 和其他第三方 SDK(如:高德地图)同时存在,使用 gradle 导入 Ping++, 会导致其他第三方 SDK(如:高德地图)找不到 so 而无法使用

  • 报错原因: Ping++ SDK 提供了 armeabi-v7aarm64-v8a,而其他第三方 SDK(如:高德地图)提供了 armeabi-v7a, 当手机是 arm64-v8a 的会去加载 arm64-v8a 包下的 so 文件,这时会报其他第三方 SDK (如:高德地图)的 so 文件找不到,而你上面的代码在打包的时候就只打包了 armeabi-v7a,所以只会去 armeabi-v7a 包下找,因此不会出现报错 建议使用各种 SDK 时保持相同的 so 文件。

  • 解决方案: 在 build.gradle 中设置 ndk

ndk {
    // 选择要添加的对应 cpu 类型的 .so 库。选择的 so 文件需要各种 SDK 保持一致
    abiFilters "armeabi-v7a", "arm64-v8a", "x86", "x86_64"
    // 根据实际情况选择所有 SDK 可以支持的类型
}

问题四:银联支付报错:

java.lang.ClassNotFoundException: org.simalliance.openmobileapi.SEServicecant find reference class org.openmobileapi.SEService
  • 报错原因: 缺少 org.simalliance.openmobileapi.SEService, 编译失败

  • 解决方案: 将 example 中 libs 下的 org.simalliance.openmobileapi.jar 拷到项目中依赖,但不要打包进 apk 中,有些手机会存在这个 jar 包

    dependencies {
        compileOnly files('libs/org.simalliance.openmobileapi.jar') // 使用 compileOnly, 不打包进 apk
    }

更多问题请到帮助中心搜索

pingpp-android's People

Contributors

afonio avatar bix29 avatar burulangtu avatar dong11 avatar samurai00 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pingpp-android's Issues

Ionic APP 在安卓中使用支付功能会出现闪退问题,日志报错信息(请导入activity_pingpp_payment.xml文件)

Android版本4.x,5.x,6.x,7.x都试过,均闪退,iOS没问题
android sdk:最新版本2.1.9
me.tongchia.cordova.pingpp:最新版本1.0.1
plugin.xml做了修改,否则无法安装,提示找不到文件

<!--android要修改两个文件链接,不然platform android无法安装,不知道是不是这个原因引起的-->
<source-file src="sdk/android/lib/pingpp/libs/alipaySingle-20161222.jar" target-dir="libs"/>
<source-file src="sdk/android/lib/pingpp/libs/libammsdk.jar" target-dir="libs"/>
<source-file src="sdk/android/lib/pingpp/libs/libpingpp-2.1.9.jar" target-dir="libs"/>
<!--屏蔽了Wx目录,不然platform ios无法安装-->
<!--<source-file src="sdk/ios/lib/Channels/Wx/libpingpp+wx.a" framework="true"/>
        <source-file src="sdk/ios/lib/Channels/Wx/libWeChatSDK.a" framework="true"/>
        <header-file src="sdk/ios/lib/Channels/Wx/WXApi.h" />
        <header-file src="sdk/ios/lib/Channels/Wx/WXApiObject.h" />-->

下面是Android Studio的Android Monitor / logcat日志信息,用的是Android Studio自带的emulator模拟器

04-18 15:09:40.004 12961-12961/me.example.app E/PING++: 请导入activity_pingpp_payment.xml文件
                                                            
                                                            --------- beginning of crash
04-18 15:09:40.006 12961-13037/me.example.app E/AndroidRuntime: FATAL EXCEPTION: Thread-8
                                                                    Process: me.example.app, PID: 12961
                                                                    java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/me.example.app-1/base.apk"],nativeLibraryDirectories=[/data/app/me.example.app-1/lib/x86, /system/lib, /vendor/lib]]] couldn't find "libpingpp.so"
                                                                        at java.lang.Runtime.loadLibrary0(Runtime.java:984)
                                                                        at java.lang.System.loadLibrary(System.java:1530)
                                                                        at com.pingplusplus.android.crypto.Crypt.<clinit>(Unknown Source)
                                                                        at com.pingplusplus.android.crypto.CryptoUtils.encryptData(Unknown Source)
                                                                        at com.pingplusplus.android.Pingpp.encryptData(Unknown Source)
                                                                        at com.pingplusplus.android.k.b(Unknown Source)
                                                                        at com.pingplusplus.android.PingppDataCollection.<init>(Unknown Source)
                                                                        at com.pingplusplus.android.a.run(Unknown Source)
                                                                        at java.lang.Thread.run(Thread.java:761)

截图
wechatimg1

建议Gradle Version不要用2.1+用确定的版本

Gradle脚本中不建议把Version写成形如2.1+的形式,这会导致AS每次的build都会检查更新,极大拖慢速度。而且协同开发时很可能导致不同的人抓取到不同版本的module,很可能导致不可预料的错误。绝大部分开源库都是在README上把最新版本注明上就可以了 #

报错信息

Warning:warning: Ignoring InnerClasses attribute for an anonymous inner class
(com.alipay.android.phone.mrpc.core.DefaultRpcClient$1) that doesn't come with an
associated EnclosingMethod attribute. This class was probably produced by a
compiler that did not target the modern .class file format. The recommended
solution is to recompile the class from source, using an up-to-date compiler
and without specifying any "-target" type options. The consequence of ignoring
this warning is that reflective operations on this class will incorrectly
indicate that it is not an inner class.

请问下这个是什么问题

关于银联支付 sdk 版本问题

由于使用了 ping++,然后今天收到了银联的邮件说必须使用3.3.2以上的sdk版本,所以请问最新 ping 中的银联 sdk 是什么版本?

两个小意见

1、SDK在调起微信支付的时候如果能判断一下,没有装微信就返回一个错误就最好了。。。
不然还要自己去判断
2、最好能支持gradle引用方式。。。这样就很方便了

上架Google Play 会收到这样的警告:安全提醒 您的应用中 WebViewClient.onReceivedSslError 处理程序的实施方式很不安全。

具体情况是这样的

安全提醒
您的应用中 WebViewClient.onReceivedSslError 处理程序的实施方式很不安全。具体来说,这种实施方式会忽略所有 SSL 证书验证错误,从而使您的应用容易受到中间人攻击。攻击者可能会更改受影响的 WebView 内容、读取传输的数据(例如登录凭据),以及执行应用中使用 JavaScript 的代码。
为了正确处理 SSL 证书验证,请将您的代码更改为在服务器提供的证书符合您的预期时调用 SslErrorHandler.proceed(),否则应调用 SslErrorHandler.cancel()。系统已向您的开发者帐号地址发送了一封电子邮件提醒,其中列出了受影响的应用和类。
请尽快解决此漏洞并增加升级版 APK 的版本号。如需详细了解 SSL 错误处理程序,请访问开发者帮助中心以参阅相关文档。如果您有其他技术问题,请在 https://www.stackoverflow.com/questions 上发帖咨询,并使用“android-security”和“SslErrorHandler”标签。如果是您使用的第三方库导致的安全漏洞,请通知该第三方,并与其合作解决此问题。
要确认您的应用是否已正确升级,请将更新后的版本上传至 Developer Console,并在 5 小时后再回来查看。如果应用并未正确升级,系统将会显示警告。
请注意,尽管这些具体问题不一定会影响每个使用 WebView SSL 的应用,但您最好安装所有最新的安全补丁。如果应用包含会让用户面临入侵风险的安全漏洞,那么我们可能会将其视为违反恶意行为政策和《开发者分发协议》第 4.4 条的规定。
请确保您发布的所有应用都遵循开发者分发协议和开发者计划政策的规定。如果您有任何问题或疑问,请通过 Google Play 开发者帮助中心与我们的支持团队联系。

我们自己的代码是没有用到onReceivedSslError 这个回调的 我觉得是不是你们的sdk中有用到这个
如果是的话我该如何处理

.wxapi.WXPayEntryActivity

    <activity-alias
        android:name=".wxapi.WXPayEntryActivity"
        android:exported="true"

android:targetActivity="com.pingplusplus.android.PaymentActivity" />
这个Activity 究竟是怎么回事,如果没有这个类无法编译,但是建这么一个页面是做什么的?

无法收到微信支付成功回调

  • 测试设备:Moto G/ Smartisan T1
  • 操作系统:Android 5.1.1/Android 4.4.4
  • SDK版本:2.1.3/2.1.5 (jcenter)

使用测试环境支付,服务器收到支付信息,客户端正确回调。
使用支付宝支付,服务器收到支付信息,客户端正确回调。
使用微信支付,服务器收到支付信息,客户端无法回调。

与百度地图SDK冲突

您好,
我单独使用ping++ android SDK没有错误。
但如果使用ping++ android SDK,同时也使用百度地图的SDK(包含定位功能、基础地图、导航功能、检索功能、LBS云检索及计算工具),会出现错误,开发工具为android studio,该如何解决?

微信支付问题,demo只能在微信第一次安装完的时候才能调起微信支付页面

微信支付问题,demo只能在微信第一次安装完的时候才能调起微信支付页面,后面无法再调起,都是返回-1。
D/PingActivity: doInBackground方法json={"amount":1,"channel":"wx"}
03-28 19:32:29.560 19809-20293/com.example.skd.myapp D/PingActivity: doInBackground方法返回的={
"id": "ch_5qHWTOnfzf109ibLG4XH8GiP",
"object": "charge",
"created": 1490700749,
"livemode": true,
"paid": false,
"refunded": false,
"app": "app_1azb18LK84u5iDSW",
"channel": "wx",
"order_no": "9b5248c014d6dc9c",
"client_ip": "60.191.47.90",
"amount": 1,
"amount_settle": 1,
"currency": "cny",
"subject": "测试订单 by afon 20170328-193229",
"body": "Your Body & 订单详情",
"extra": {},
"time_paid": null,
"time_expire": 1490701049,
"time_settle": null,
"transaction_no": null,
"refunds": {
"object": "list",
"url": "/v1/charges/ch_5qHWTOnfzf109ibLG4XH8GiP/refunds",
"has_more": false,
"data": []
},
"amount_refunded": 0,
"failure_code": null,
"failure_msg": null,
"metadata": {
"ori_channel": "wx"
},
"credential": {
"object": "credential",
"wx": {
"appId": "wx452efc73f9397542",
"partnerId": "1224524301",
"prepayId": "3201033000170328eb5f0a3c65ebfc77",
"nonceStr": "f2e512f3428863c6fcefc3caa74bfba0",
"timeStamp": 1490700749,
"packageValue": "Sign=WXPay",
"sign": "117e0970657b09a1d2cbbb0e9dcfff28441b2c6b"
}
},
"description": null
}
03-28 19:32:29.560 19809-19809/com.example.skd.myapp D/PingActivity: onPostExecute方法data={
"id": "ch_5qHWTOnfzf109ibLG4XH8GiP",
"object": "charge",
"created": 1490700749,
"livemode": true,
"paid": false,
"refunded": false,
"app": "app_1azb18LK84u5iDSW",
"channel": "wx",
"order_no": "9b5248c014d6dc9c",
"client_ip": "60.191.47.90",
"amount": 1,
"amount_settle": 1,
"currency": "cny",
"subject": "测试订单 by afon 20170328-193229",
"body": "Your Body & 订单详情",
"extra": {},
"time_paid": null,
"time_expire": 1490701049,
"time_settle": null,
"transaction_no": null,
"refunds": {
"object": "list",
"url": "/v1/charges/ch_5qHWTOnfzf109ibLG4XH8GiP/refunds",
"has_more": false,
"data": []
},
"amount_refunded": 0,
"failure_code": null,
"failure_msg": null,
"metadata": {
"ori_channel": "wx"
},
"credential": {
"object": "credential",
"wx": {
"appId": "wx452efc73f9397542",
"partnerId": "1224524301",
"prepayId": "3201033000170328eb5f0a3c65ebfc77",
"nonceStr": "f2e512f3428863c6fcefc3caa74bfba0",
"timeStamp": 1490700749,
"packageValue": "Sign=WXPay",
"sign": "117e0970657b09a1d2cbbb0e9dcfff28441b2c6b"
}
},
"description": null
}
03-28 19:32:30.530 19809-19809/com.example.skd.myapp D/PingActivity: result=fail
03-28 19:32:30.530 19809-19809/com.example.skd.myapp D/PingActivity: errorMsg=channel_returns_fail
03-28 19:32:30.530 19809-19809/com.example.skd.myapp D/PingActivity: extraMsg=wx_err_code:-1

调起支付控件示例代码中setComponent有何作用?

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);

这里的new ComponentName(packageName, packageName + ".wxapi.WXPayEntryActivity");有何作用?chanel设置为alipay,调起的是支付宝的支付控件 。这说明setComponent并没有起什么作用。

个人认为以activity的方式打开ping++的sdk,并在onActivityResult中得到结果的处理方式不太好。或许可以采用回调的方式得到支付结果,类似Pingxx.pay(String data, callback);这种

Gradle升级到3.3 android studio用2.3 example 报错了

Executing tasks: [:example:assembleDebug]

Configuration on demand is an incubating feature.
Incremental java compilation is an incubating feature.
:example:preBuild UP-TO-DATE
:example:preDebugBuild UP-TO-DATE
:example:checkDebugManifest
:lib:bdwallet_pay_sdk:preBuild UP-TO-DATE
:lib:bdwallet_pay_sdk:preReleaseBuild UP-TO-DATE
:lib:bdwallet_pay_sdk:checkReleaseManifest
:lib:bdwallet_pay_sdk:prepareReleaseDependencies
:lib:bdwallet_pay_sdk:compileReleaseAidl UP-TO-DATE
:lib:bdwallet_pay_sdk:compileReleaseNdk UP-TO-DATE
:lib:bdwallet_pay_sdk:compileLint UP-TO-DATE
:lib:bdwallet_pay_sdk:copyReleaseLint UP-TO-DATE
:lib:bdwallet_pay_sdk:mergeReleaseShaders UP-TO-DATE
:lib:bdwallet_pay_sdk:compileReleaseShaders UP-TO-DATE
:lib:bdwallet_pay_sdk:generateReleaseAssets UP-TO-DATE
:lib:bdwallet_pay_sdk:mergeReleaseAssets UP-TO-DATE
:lib:bdwallet_pay_sdk:mergeReleaseProguardFiles UP-TO-DATE
:lib:bdwallet_pay_sdk:packageReleaseRenderscript UP-TO-DATE
:lib:bdwallet_pay_sdk:compileReleaseRenderscript UP-TO-DATE
:lib:bdwallet_pay_sdk:generateReleaseResValues UP-TO-DATE
:lib:bdwallet_pay_sdk:generateReleaseResources UP-TO-DATE
:lib:bdwallet_pay_sdk:packageReleaseResources UP-TO-DATE
:lib:bdwallet_pay_sdk:processReleaseManifest UP-TO-DATE
:lib:bdwallet_pay_sdk:generateReleaseBuildConfig UP-TO-DATE
:lib:bdwallet_pay_sdk:processReleaseResources
:lib:bdwallet_pay_sdk:generateReleaseSources
:lib:bdwallet_pay_sdk:incrementalReleaseJavaCompilationSafeguard UP-TO-DATE
:lib:bdwallet_pay_sdk:javaPreCompileRelease
:lib:bdwallet_pay_sdk:compileReleaseJavaWithJavac UP-TO-DATE
:lib:bdwallet_pay_sdk:processReleaseJavaRes UP-TO-DATE
:lib:bdwallet_pay_sdk:transformResourcesWithMergeJavaResForRelease UP-TO-DATE
:lib:bdwallet_pay_sdk:transformClassesAndResourcesWithSyncLibJarsForRelease UP-TO-DATE
:lib:bdwallet_pay_sdk:mergeReleaseJniLibFolders UP-TO-DATE
:lib:bdwallet_pay_sdk:transformNativeLibsWithMergeJniLibsForRelease UP-TO-DATE
:lib:bdwallet_pay_sdk:transformNativeLibsWithStripDebugSymbolForRelease FAILED

FAILURE: Build failed with an exception.

  • What went wrong:
    Execution failed for task ':lib:bdwallet_pay_sdk:transformNativeLibsWithStripDebugSymbolForRelease'.

java.lang.NullPointerException (no error message)

  • Try:
    Run with --info or --debug option to get more log output.

  • Exception is:
    org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':lib:bdwallet_pay_sdk:transformNativeLibsWithStripDebugSymbolForRelease'.
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:84)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:55)
    at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:62)
    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
    at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:88)
    at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:46)
    at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:51)
    at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
    at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
    at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.execute(DefaultTaskGraphExecuter.java:236)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.execute(DefaultTaskGraphExecuter.java:228)
    at org.gradle.internal.Transformers$4.transform(Transformers.java:169)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:106)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:61)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:228)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:215)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:77)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:58)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:32)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:113)
    at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:37)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37)
    at org.gradle.execution.DefaultBuildExecuter.access$000(DefaultBuildExecuter.java:23)
    at org.gradle.execution.DefaultBuildExecuter$1.proceed(DefaultBuildExecuter.java:43)
    at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:30)
    at org.gradle.initialization.DefaultGradleLauncher$3.execute(DefaultGradleLauncher.java:196)
    at org.gradle.initialization.DefaultGradleLauncher$3.execute(DefaultGradleLauncher.java:193)
    at org.gradle.internal.Transformers$4.transform(Transformers.java:169)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:106)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:56)
    at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:193)
    at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:119)
    at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:102)
    at org.gradle.launcher.exec.GradleBuildController.run(GradleBuildController.java:71)
    at org.gradle.tooling.internal.provider.runner.BuildModelActionRunner.run(BuildModelActionRunner.java:50)
    at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
    at org.gradle.tooling.internal.provider.runner.RunAsBuildOperationBuildActionRunner$1.execute(RunAsBuildOperationBuildActionRunner.java:43)
    at org.gradle.tooling.internal.provider.runner.RunAsBuildOperationBuildActionRunner$1.execute(RunAsBuildOperationBuildActionRunner.java:40)
    at org.gradle.internal.Transformers$4.transform(Transformers.java:169)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:106)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:56)
    at org.gradle.tooling.internal.provider.runner.RunAsBuildOperationBuildActionRunner.run(RunAsBuildOperationBuildActionRunner.java:40)
    at org.gradle.tooling.internal.provider.runner.SubscribableBuildActionRunner.run(SubscribableBuildActionRunner.java:75)
    at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:41)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:26)
    at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:75)
    at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:49)
    at org.gradle.tooling.internal.provider.ServicesSetupBuildActionExecuter.execute(ServicesSetupBuildActionExecuter.java:44)
    at org.gradle.tooling.internal.provider.ServicesSetupBuildActionExecuter.execute(ServicesSetupBuildActionExecuter.java:29)
    at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:67)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:47)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:26)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:34)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:74)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:72)
    at org.gradle.util.Swapper.swap(Swapper.java:38)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:72)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:55)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:60)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:72)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:50)
    at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:297)
    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54)
    at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40)
    Caused by: java.lang.NullPointerException
    at com.android.ide.common.process.ProcessInfoBuilder.setExecutable(ProcessInfoBuilder.java:97)
    at com.android.build.gradle.internal.transforms.StripDebugSymbolTransform.stripFile(StripDebugSymbolTransform.java:223)
    at com.android.build.gradle.internal.transforms.StripDebugSymbolTransform.transform(StripDebugSymbolTransform.java:187)
    at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:185)
    at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:181)
    at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:102)
    at com.android.build.gradle.internal.pipeline.TransformTask.transform(TransformTask.java:176)
    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
    at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$IncrementalTaskAction.doExecute(DefaultTaskClassInfoStore.java:163)
    at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.execute(DefaultTaskClassInfoStore.java:134)
    at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.execute(DefaultTaskClassInfoStore.java:123)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:95)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:76)
    ... 78 more

BUILD FAILED

Total time: 1.125 secs

Ping++和高德地图兼容性

Ping++和高德都是使用gradle导入

不设置ndk会导致高德地图找不到so而无法使用

        ndk {
            //选择要添加的对应cpu类型的.so库。
            abiFilters 'armeabi'
            // 还可以添加 'x86', 'x86_64', 'mips', 'mips64',, 'armeabi-v7a', 'armeabi-v8a'
        }

调用微信支付闪一下就没有了

D/PING++: PaymentActivity wx result errCode : -1 , errStr:null
I/openSDK_LOG.Tencent: onActivityResultData() reqcode = 1010, resultcode = -1, data = null ? false, listener = null ? false
I/openSDK_LOG.UIListenerManager: onActivityResult req=1010 res=-1
E/openSDK_LOG.UIListenerManager: getListner action is null! rquestCode=1010

用的是最新的包

RuntimeException on latest version 2.1.6

While using this version, it throws an exception described below:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.xxx.xxx/com.pingplusplus.android.PaymentActivity}: java.lang.ClassCastException: android.webkit.WebView cannot be cast to com.pingplusplus.android.WebViewEx at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2423)
....
Caused by: java.lang.ClassCastException: android.webkit.WebView cannot be cast to com.pingplusplus.android.WebViewEx at com.pingplusplus.android.q.(Unknown Source) at com.pingplusplus.android.PaymentActivity.b(Unknown Source)
...

Such an obvious error should have been detected by any tests if there were any.

官网开发文档跟下载文档不一样

我该听谁的,而且导入能不能说详细点,怎么导入怎么错,现在最新文档只用导入bdwallet_pay_sdk,pingpp,但是文档还有pingpp_one,到底该怎么的?

Unable to start activity

错误信息如下:

09-11 02:19:43.020 30603-30603/news.chen.yu.ionic E/AndroidRuntime: FATAL EXCEPTION: main
                                                                    Process: news.chen.yu.ionic, PID: 30603
                                                                    java.lang.RuntimeException: Unable to start activity ComponentInfo{news.chen.yu.ionic/com.pingplusplus.android.PaymentActivity}: android.content.res.Resources$NotFoundException: Resource ID #0x0
                                                                        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2661)
                                                                        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
                                                                        at android.app.ActivityThread.access$900(ActivityThread.java:172)
                                                                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1421)
                                                                        at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                        at android.os.Looper.loop(Looper.java:145)
                                                                        at android.app.ActivityThread.main(ActivityThread.java:5835)
                                                                        at java.lang.reflect.Method.invoke(Native Method)
                                                                        at java.lang.reflect.Method.invoke(Method.java:372)
                                                                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
                                                                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
                                                                     Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x0
                                                                        at android.content.res.Resources.getValue(Resources.java:2333)
                                                                        at android.content.res.Resources.loadXmlResourceParser(Resources.java:3881)
                                                                        at android.content.res.Resources.getLayout(Resources.java:2149)
                                                                        at android.view.LayoutInflater.inflate(LayoutInflater.java:413)
                                                                        at android.view.LayoutInflater.inflate(LayoutInflater.java:366)
                                                                        at com.pingplusplus.android.p.<init>(Unknown Source)
                                                                        at com.pingplusplus.android.PaymentActivity.b(Unknown Source)
                                                                        at com.pingplusplus.android.PaymentActivity.onCreate(Unknown Source)
                                                                        at android.app.Activity.performCreate(Activity.java:6221)
                                                                        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
                                                                        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2614)
                                                                        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) 
                                                                        at android.app.ActivityThread.access$900(ActivityThread.java:172) 
                                                                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1421) 
                                                                        at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                        at android.os.Looper.loop(Looper.java:145) 
                                                                        at android.app.ActivityThread.main(ActivityThread.java:5835) 
                                                                        at java.lang.reflect.Method.invoke(Native Method) 
                                                                        at java.lang.reflect.Method.invoke(Method.java:372) 
                                                                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399) 
                                                                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194) 

银联支付崩溃

崩溃Log:

03-22 18:34:45.837: E/====(26469): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.hantai.voyager/com.unionpay.uppay.PayActivity}: java.lang.NullPointerException
03-22 18:34:45.837: E/====(26469): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2198)
03-22 18:34:45.837: E/====(26469): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2248)
03-22 18:34:45.837: E/====(26469): at android.app.ActivityThread.access$600(ActivityThread.java:145)
03-22 18:34:45.837: E/====(26469): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1246)
03-22 18:34:45.837: E/====(26469): at android.os.Handler.dispatchMessage(Handler.java:99)
03-22 18:34:45.837: E/====(26469): at android.os.Looper.loop(Looper.java:137)
03-22 18:34:45.837: E/====(26469): at android.app.ActivityThread.main(ActivityThread.java:5106)
03-22 18:34:45.837: E/====(26469): at java.lang.reflect.Method.invokeNative(Native Method)
03-22 18:34:45.837: E/====(26469): at java.lang.reflect.Method.invoke(Method.java:511)
03-22 18:34:45.837: E/====(26469): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:821)
03-22 18:34:45.837: E/====(26469): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:588)
03-22 18:34:45.837: E/====(26469): at dalvik.system.NativeStart.main(Native Method)
03-22 18:34:45.837: E/====(26469): Caused by: java.lang.NullPointerException
03-22 18:34:45.837: E/====(26469): at java.io.FilterInputStream.skip(FilterInputStream.java:171)
03-22 18:34:45.837: E/====(26469): at com.unionpay.mobile.android.resource.c.a(Unknown Source)
03-22 18:34:45.837: E/====(26469): at com.unionpay.mobile.android.widgets.m.(Unknown Source)
03-22 18:34:45.837: E/====(26469): at com.unionpay.mobile.android.widgets.m.(Unknown Source)
03-22 18:34:45.837: E/====(26469): at com.unionpay.mobile.android.plugin.BaseActivity.onCreate(Unknown Source)
03-22 18:34:45.837: E/====(26469): at com.unionpay.uppay.PayActivity.onCreate(Unknown Source)
03-22 18:34:45.837: E/====(26469): at android.app.Activity.performCreate(Activity.java:5109)
03-22 18:34:45.837: E/====(26469): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
03-22 18:34:45.837: E/====(26469): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2162)
03-22 18:34:45.837: E/====(26469): ... 11 more

charge信息:
{
"charge":"{"id":"ch_nDaX5814WTGO4OmLSGGuzvvL","object":"charge","created":1458642689,"livemode":true,"paid":false,"refunded":false,"app":"app_aDqPO88ebzbL0OOy","channel":"upacp","orderNo":"12345678","clientIp":"127.0.0.1","amount":12300,"amountSettle":12300,"currency":"cny","subject":"机票","body":"机票","timeExpire":1458646289,"refunds":{"object":"list","url":"/v1/charges/ch_nDaX5814WTGO4OmLSGGuzvvL/refunds","hasMore":false,"data":[]},"amountRefunded":0,"metadata":{},"credential":{"object":"credential","upacp":{"tn":"201603221811119348378","mode":"00"}},"extra":{}}"
}

请尽快回复,谢谢!

一套调用方式,支付宝正常!
支付宝charge:
{
"charge":"{"id":"ch_9KuTuPH0yzXDq54WjTPSSm9K","object":"charge","created":1458642640,"livemode":true,"paid":false,"refunded":false,"app":"app_aDqPO88ebzbL0OOy","channel":"alipay","orderNo":"12345678","clientIp":"127.0.0.1","amount":12300,"amountSettle":12300,"currency":"cny","subject":"机票","body":"机票","timeExpire":1458729040,"refunds":{"object":"list","url":"/v1/charges/ch_9KuTuPH0yzXDq54WjTPSSm9K/refunds","hasMore":false,"data":[]},"amountRefunded":0,"metadata":{},"credential":{"object":"credential","alipay":{"orderInfo":"service\u003d"mobile.securitypay.pay"\u0026_input_charset\u003d"utf-8"\u0026notify_url\u003d"https%3A%2F%2Fapi.pingxx.com%2Fnotify%2Fcharges%2Fch_9KuTuPH0yzXDq54WjTPSSm9K"\u0026partner\u003d"2088121009223318"\u0026out_trade_no\u003d"12345678"\u0026subject\u003d"机票"\u0026body\u003d"机票"\u0026total_fee\u003d"123.00"\u0026payment_type\u003d"1"\u0026seller_id\u003d"2088121009223318"\u0026it_b_pay\u003d"2016-03-23 18:30:40"\u0026sign\u003d"XCsj37UC4V7aD1D%2BCE1NDJqJqtZYY1TCJQ%2FfhjqBk8Kqj0jTZfm7LTNluYdPAzBeNq0Yg7Gij2FAulIXzyTmDraHtLQMUrknHJE5Zp%2BB5RtqTL72V4cIo52inFhhngwcC0Jy8WVTdAOuV7%2F0RfXShuo5RzndaoPlps7EBItMEJE%3D"\u0026sign_type\u003d"RSA""}},"extra":{}}"
}

支付与微信分享发生冲突

android studio ide:

  1. app 中可以微信分享成功,即原本sdk中有 libammsdk.jar
  2. 按照最新的方式导入,发现 pingapp 中的 libammsdk 与原有冲突,并且与原有的不一样。
    如果保留pingapp的 libammsdk,会导致build 失败,具体是微信sdk中 api.sendReq(req) 这个方法失败。
    如果保留微信原有libammsdk.jar,则使用时,报告 NoClassDefFoundError,具体就是:

java.lang.NoClassDefFoundError:
Failed resolution of: Lcom/tencent/mm/sdk/modelpay/PayReq;

开发请指导如何解决?

alipay crash (关于权限问题)

platform:android 4.4.2
device:sony xperia
sdk version: libpingpp-2.0.5

目前仅在该设备发现此奔溃,在选择发起支付宝支付时,360安全卫士(极客版)提示app获取应用列表的权限,选择禁止后,只要调用支付宝支付就会崩溃。
目前只发现该环境会有获取应用列表的权限。


堆栈:

java.lang.NullPointerException
com.alipay.sdk.util.h.a(Unknown Source)
com.alipay.sdk.app.PayTask.pay(Unknown Source)
com.pingplusplus.android.a.run(Unknown Source)

Ping++招行一网通支付如何配置支付成功后和IOS一样直接返回。而不用配置中间页?即使后台返回的result_url无效。

Ping++招行一网通支付如何配置支付成功后和IOS一样直接返回。而不用配置中间页?即使后台返回的result_url无效。
IOS端:2.2.8 及以上版本,可选择是否在 WAP 渠道中支付完成后,点击“返回商户”按钮,直接关闭支付页面。开启方法:[Pingpp ignoreResultUrl: YES];注:该方法需在客户端 SDK 中 createPayment 方法前使用。
Android端:并没有相关的文档注释。我自己找了
image
但是无效。请问我如何去配置。使我最后能够直接返回。而不用去跳转到result_url配置de的网址。

把 ping 的 jar 更新成最新的依赖项目pingpp之后不能通过编译

报错如下:
Error:Execution failed for task ':app:transformClassesWithJarMergingForDebug'.

com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: a/a/a/a.class

在 debug 了一阵子之后发现把友盟统计的 jar 移除就没有问题了,但是统计功能是要保存的,所以请问现在是要怎么处理才能保留友盟统计与 ping++?

添加微信支付编译不了

Error:Execution failed for task ':gettv:transformClassesWithJarMergingForGettvDebug'.

com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: com/tencent/mm/a/a.class

每个平台的包依赖未描述清楚

/lib/libs 目录里包含了支付宝,微信支付,银联三个平台,应该把每个平台依赖哪些文件列出来,避免加入不需要的平台。so库并没有说明是哪个平台的。

点击微信支付,弹出支付宝支付

private void initPingpp() {
//设置需要使用的支付方式
PingppOne.enableChannels(new String[]{"alipay", "wx"});

    // 提交数据的格式,默认格式为json
    // PingppOne.CONTENT_TYPE = "application/x-www-form-urlencoded";
    PingppOne.CONTENT_TYPE = "application/json";

    PingppLog.DEBUG = true;
}

建议提供Gradle支持

类似于这样子,这样子升级Ping++ SDK会更加的方便

compile 'com.pingxx:pingxx-sdk:1.0.+'
compile 'com.pingxx:pingxx-alipay:1.0.+'
compile 'com.pingxx:pingxx-wxpay:1.0.+'

调用sdk的时候Pingpp.createPayment(arg0, arg1);报错com.pingplusplus.android.PaymentActivity}: android.content.res.Resources$NotFoundException: Resource ID #0x0

Unable to start activity ComponentInfo{cn.wifi.bryant.ttelife/com.pingplusplus.android.PaymentActivity}:
android.content.res.Resources$NotFoundException: Resource ID #0x0
请问是什么问题资源没有找到,
设置字符串都是设置的string值,不是这个问题,项目也clean了,不知道是什么原因,比较紧急,请教解答??

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.