Android PayPal支付

最近集成完PayPal支付,记录一下集成注意事项。

一、PayPal版本选择

由于官方不再支持旧版的"PayPal-Android-SDK",所以决定直接集成"Native Checkout SDK"。

二、集成环境

我是在Macos上开发,之前一直用的Android Studio 3.2.0版本,但是Native Checkout SDK的SDK和 demo都是用的kotlin,集成过程中一直有各种问题,最后直接更新到 Android Studio 4.2.2版本就成功集成了。

三、集成遇到的问题

1、官司方指导第二步“2.Add the SDK to your app​​​​​​​”中,这段代码里面的lotlinOptions导致我编译失败,所以把这个删掉了。

android {...compileOptions {sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility JavaVersion.VERSION_1_8}/* 删除这段kotlinOptions {jvmTarget = "1.8"}*/
}

2、在支付的时候,跳转到网页后,一直提示"此操作好像不受支持。请返回并报告此错,以便我们今后为您提供支持。(client_id或redirect_url无效)"。这个问题是折腾最久的,主要检查以下几个地方

1)环境和对应的client_id是否匹配,如果正式环境用了沙盒的clientid,是会报这个错的。

2)集成时比较大意,没有仔细看"Know before you code" ,导致缺少了一些配置。

2.1)在后台设置Return URL,同时要在app的AndroidManifest里面配置一下

2.2)勾选 Log in with PayPal ,并且勾选它里面的Full name和Email,填写隐私政策和用户协议网址。

 处理完这几点,我这边的支付也就能成功了。

————不过这里有一点要注意的是,Live环境下,默认只允许打开Full name这个属性,Email属性是无法打开的,导致Sandbox能支付成功,但Live不行。根据提示,我们必须发邮件给help-loginappreview@paypal.com请求打开Email属性才可以。

3、后台那边要求提供paymentId和orderId,但是在onCaptureComplete成功后,获取paymentId却一直是null,orderId正常。最终是后台那边修改后,只需要orderId就搞定了。

---------------------------------------2022-03-22补充------------------------------

开发最悲哀的就是集成过一次,过几个月再去集成的时候,又一直失败。最近因为另一个项目也需要集成paypal支付,于是按部就班的从原来那个项目把关键代码都拷过来了,这里大概贴一下:

//1、在build.gradle中添加
dependencies {implementation 'com.paypal.checkout:android-sdk:0.3.1'
}
//2、全局初始化一次
{CheckoutConfig config = new CheckoutConfig("Application实例","client ID",(g_paypalSandboxEnvirment ? com.paypal.checkout.config.Environment.SANDBOX : com.paypal.checkout.config.Environment.LIVE),"包名://paypalpay",CurrencyCode.USD,UserAction.PAY_NOW,new SettingsConfig(true,false));PayPalCheckout.setConfig(config);
}
//3、在xml中集成PayPalButton
<com.paypal.checkout.paymentbutton.PayPalButtonandroid:id="@+id/payPalButton"android:layout_width="match_parent"android:layout_height="wrap_content"/>
//4、监听支付结果
payPalButton.setup(new CreateOrder() {@Overridepublic void create(@NotNull CreateOrderActions createOrderActions) {Log.i("CaptureOrder", "create: ");}},new OnApprove() {@Overridepublic void onApprove(@NotNull Approval approval) {Log.i("CaptureOrder", "getOrderId: " + approval.getData().getOrderId());}},new OnCancel() {@Overridepublic void onCancel() {Log.d("CaptureOrder", "Buyer cancelled the PayPal experience.");}},new OnError() {@Overridepublic void onError(@NotNull ErrorInfo errorInfo) {Log.d("CaptureOrder", String.format("Error: %s", errorInfo));}}
);

可以却碰到了几个问题:

1、因为平常都是用java开发,而PayPal支付是用的kotlin,会碰到几个错误:

1)org.jetbrains.annotations.NotNull找不到

2)找不到kotlin.jvm.functions.Function1的类文件

解决办法:打开Tools->Kotlin->Configure Kotlin in Project,对module配置kotlin支持就行了。可以参考这个博客https://blog.csdn.net/qq_32886769/article/details/105695369

只不过在提示Choose Configurator时注意选择Android With Gradle

2、然后又碰到错误:AAPT: error: resource android:attr/lStar not found.

解决办法:在第1步中支持kotlin后,在gradle中有自动加入这行代码:

implementation "androidx.core:core-ktx:+",如果没找到可全局搜一下。

我们需要把它改为 implementation "androidx.core:core-ktx:1.6.0"

啥原因我也解释不了,参考博客https://www.zhihu.com/question/484282465

3、以上2步后,可以正常运行了,但是CheckoutConfig初始化时,直接挂掉了。

2022-03-22 15:51:15.769 28696-28696/com.paypal.mykj W/System.err: java.lang.ExceptionInInitializerError
2022-03-22 15:51:15.769 28696-28696/com.paypal.mykj W/System.err:     at okhttp3.internal.platform.Platform.get(Platform.java:85)
2022-03-22 15:51:15.769 28696-28696/com.paypal.mykj W/System.err:     at okhttp3.OkHttpClient.newSslSocketFactory(OkHttpClient.java:263)
2022-03-22 15:51:15.769 28696-28696/com.paypal.mykj W/System.err:     at okhttp3.OkHttpClient.<init>(OkHttpClient.java:229)
2022-03-22 15:51:15.769 28696-28696/com.paypal.mykj W/System.err:     at okhttp3.OkHttpClient$Builder.build(OkHttpClient.java:1015)
2022-03-22 15:51:15.769 28696-28696/com.paypal.mykj W/System.err:     at com.paypal.pyplcheckout.services.api.NetworkObject$okHttpClient$2.invoke(NetworkObject.kt:30)
2022-03-22 15:51:15.769 28696-28696/com.paypal.mykj W/System.err:     at com.paypal.pyplcheckout.services.api.NetworkObject$okHttpClient$2.invoke(NetworkObject.kt:11)
2022-03-22 15:51:15.769 28696-28696/com.paypal.mykj W/System.err:     at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
2022-03-22 15:51:15.769 28696-28696/com.paypal.mykj W/System.err:     at com.paypal.pyplcheckout.services.api.NetworkObject.getOkHttpClient(Unknown Source:2)
2022-03-22 15:51:15.769 28696-28696/com.paypal.mykj W/System.err:     at com.paypal.pyplcheckout.di.NetworkModule.providesOkHttpClient(NetworkModule.kt:16)
2022-03-22 15:51:15.770 28696-28696/com.paypal.mykj W/System.err:     at com.paypal.pyplcheckout.di.NetworkModule_ProvidesOkHttpClientFactory.providesOkHttpClient(NetworkModule_ProvidesOkHttpClientFactory.java:29)
2022-03-22 15:51:15.770 28696-28696/com.paypal.mykj W/System.err:     at com.paypal.pyplcheckout.di.NetworkModule_ProvidesOkHttpClientFactory.get(NetworkModule_ProvidesOkHttpClientFactory.java:21)
2022-03-22 15:51:15.770 28696-28696/com.paypal.mykj W/System.err:     at com.paypal.pyplcheckout.di.NetworkModule_ProvidesOkHttpClientFactory.get(NetworkModule_ProvidesOkHttpClientFactory.java:8)
2022-03-22 15:51:15.770 28696-28696/com.paypal.mykj W/System.err:     at dagger.internal.DoubleCheck.get(DoubleCheck.java:47)
2022-03-22 15:51:15.770 28696-28696/com.paypal.mykj W/System.err:     at com.paypal.pyplcheckout.di.DaggerSdkComponent.getRetrieveFundingEligibilityAction(DaggerSdkComponent.java:298)
2022-03-22 15:51:15.770 28696-28696/com.paypal.mykj W/System.err:     at com.paypal.checkout.PayPalCheckout$updateFundingEligibility$1.invokeSuspend(PayPalCheckout.kt:84)
2022-03-22 15:51:15.770 28696-28696/com.paypal.mykj W/System.err:     at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
2022-03-22 15:51:15.770 28696-28696/com.paypal.mykj W/System.err:     at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
2022-03-22 15:51:15.770 28696-28696/com.paypal.mykj W/System.err:     at android.os.Handler.handleCallback(Handler.java:938)
2022-03-22 15:51:15.770 28696-28696/com.paypal.mykj W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:99)
2022-03-22 15:51:15.770 28696-28696/com.paypal.mykj W/System.err:     at android.os.Looper.loop(Looper.java:223)
2022-03-22 15:51:15.770 28696-28696/com.paypal.mykj W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:7664)
2022-03-22 15:51:15.770 28696-28696/com.paypal.mykj W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
2022-03-22 15:51:15.770 28696-28696/com.paypal.mykj W/System.err:     at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
2022-03-22 15:51:15.770 28696-28696/com.paypal.mykj W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
2022-03-22 15:51:15.770 28696-28696/com.paypal.mykj W/System.err: Caused by: java.lang.IllegalStateException: Expected Android API level 21+ but was 30
2022-03-22 15:51:15.770 28696-28696/com.paypal.mykj W/System.err:     at okhttp3.internal.platform.AndroidPlatform.buildIfSupported(AndroidPlatform.java:238)
2022-03-22 15:51:15.770 28696-28696/com.paypal.mykj W/System.err:     at okhttp3.internal.platform.Platform.findPlatform(Platform.java:202)
2022-03-22 15:51:15.770 28696-28696/com.paypal.mykj W/System.err:     at okhttp3.internal.platform.Platform.<clinit>(Platform.java:79)
2022-03-22 15:51:15.770 28696-28696/com.paypal.mykj W/System.err: 	... 24 more

因为看样子跟okhttp有关,于是检查了下我集成的okhttp版本,是3.8.0,于是改成了4.6.0

    //旧版本干掉  implementation 'com.squareup.okhttp3:okhttp:3.8.0'implementation 'com.squareup.okhttp3:logging-interceptor:3.5.0'implementation 'com.squareup.okio:okio:1.7.0'//支持新版本implementation "com.squareup.okhttp3:okhttp:4.6.0"

4、这时候初始化也正常了,但是还有个大坑,直接在我加载PaypalButton的时候挂了

2022-03-22 15:55:45.000 29484-29484/com.paypal.mykj W/System.err: android.view.InflateException: Binary XML file line #193 in com.paypal.mykj:layout/check_result_dialog_view: Binary XML file line #193 in com.paypal.mykj:layout/check_result_dialog_view: Error inflating class com.paypal.checkout.paymentbutton.PayPalButton
2022-03-22 15:55:45.000 29484-29484/com.paypal.mykj W/System.err: Caused by: android.view.InflateException: Binary XML file line #193 in com.paypal.mykj:layout/check_result_dialog_view: Error inflating class com.paypal.checkout.paymentbutton.PayPalButton

这下有点懵了,怎么集成PayPalButton这么还能出错,找了一通没找到任何原因。后来再仔细看了下日志,发现有这么一段

2022-03-22 15:55:45.002 29484-29484/com.paypal.mykj W/System.err: Caused by: java.lang.IllegalArgumentException: The style on this component requires your app theme to be Theme.AppCompat (or a descendant).
2022-03-22 15:55:45.002 29484-29484/com.paypal.mykj W/System.err:     at com.google.android.material.internal.ThemeEnforcement.checkTheme(ThemeEnforcement.java:243)
2022-03-22 15:55:45.002 29484-29484/com.paypal.mykj W/System.err:     at com.google.android.material.internal.ThemeEnforcement.checkAppCompatTheme(ThemeEnforcement.java:213)
2022-03-22 15:55:45.002 29484-29484/com.paypal.mykj W/System.err:     at com.google.android.material.internal.ThemeEnforcement.checkCompatibleTheme(ThemeEnforcement.java:148)
2022-03-22 15:55:45.002 29484-29484/com.paypal.mykj W/System.err:     at com.google.android.material.internal.ThemeEnforcement.obtainStyledAttributes(ThemeEnforcement.java:76)
2022-03-22 15:55:45.002 29484-29484/com.paypal.mykj W/System.err:     at com.google.android.material.progressindicator.BaseProgressIndicatorSpec.<init>(BaseProgressIndicatorSpec.java:79)
2022-03-22 15:55:45.002 29484-29484/com.paypal.mykj W/System.err:     at com.google.android.material.progressindicator.CircularProgressIndicatorSpec.<init>(CircularProgressIndicatorSpec.java:75)
2022-03-22 15:55:45.002 29484-29484/com.paypal.mykj W/System.err:     at com.google.android.material.progressindicator.CircularProgressIndicatorSpec.<init>(CircularProgressIndicatorSpec.java:67)
2022-03-22 15:55:45.002 29484-29484/com.paypal.mykj W/System.err:     at com.google.android.material.progressindicator.CircularProgressIndicatorSpec.<init>(CircularProgressIndicatorSpec.java:62)
2022-03-22 15:55:45.002 29484-29484/com.paypal.mykj W/System.err:     at com.google.android.material.progressindicator.CircularProgressIndicator.createSpec(CircularProgressIndicator.java:80)
2022-03-22 15:55:45.002 29484-29484/com.paypal.mykj W/System.err:     at com.google.android.material.progressindicator.CircularProgressIndicator.createSpec(CircularProgressIndicator.java:51)
2022-03-22 15:55:45.002 29484-29484/com.paypal.mykj W/System.err:     at com.google.android.material.progressindicator.BaseProgressIndicator.<init>(BaseProgressIndicator.java:143)
2022-03-22 15:55:45.002 29484-29484/com.paypal.mykj W/System.err:     at com.google.android.material.progressindicator.CircularProgressIndicator.<init>(CircularProgressIndicator.java:71)
2022-03-22 15:55:45.002 29484-29484/com.paypal.mykj W/System.err:     at com.google.android.material.progressindicator.CircularProgressIndicator.<init>(CircularProgressIndicator.java:66)
2022-03-22 15:55:45.002 29484-29484/com.paypal.mykj W/System.err: 	... 42 more

这才发现,原来是AndroidManifest中的Application主题设置错误,这项目原来是别人搞的,他的主题设置的是 android:theme="@android:style/Theme.Holo.Light",而CircularProgressIndicator需要的主题是Theme.AppCompat。把这个改掉,总算是堂堂正正的跑起来了。心情舒畅了。。。

---------------------------------------------------------------------------------------

本文主要是自己做个笔记,也希望大家在集成PayPal时少踩几个坑。有不到之处敬请谅解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/62489.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在网站集成Payssion的国外支付方式?

如果你的用户来自海外&#xff0c;那你可能已经接入paypal ,信用卡&#xff0c;西联来收款。 今天我们再介绍另一种收款方式&#xff0c;既能极大的提高你网站的转化率&#xff0c;且在很多国家使用率高于paypal和信用卡。 这就是海外本地支付方式&#xff08;如中国的本地支…

仿牌独立站如何通过PayPal.Me亲友付进行收款

14 5月 先来看一段PP官方对于paypal me的介绍: PayPal.Me是什么 PayPal.Me是一种与您的企业账户相联的个性化链接。您仅需为自己或您的企业创建独特的自定义链接&#xff0c;分享出去即可轻松收款。这意味着&#xff0c;您无需再进行繁琐的银行转账&#xff0c;可轻松享受Pa…

stripe国际支付(对接支付宝、微信)

前言&#xff1a;stripe国际支付现在网上资料很少&#xff0c;且不支持中国&#xff0c;所以如果要用需要去支持的国家注册商户&#xff0c;官网的java demo是用的spark框架&#xff0c;我这里用的spring&#xff0c;验签需要手动验签&#xff0c;且不能用官网的方法 正文&…

再度盈利,搜狐稳了?

2016年在宣布要用3年时间回归互联网舞台中心之后&#xff0c;很长一段时间内张朝阳积极活跃在各种社交媒体上&#xff0c;完全是一派“积极出山”的姿态。而后畅游从美股退市&#xff0c;搜狗“卖身”腾讯&#xff0c;一系列的收缩动作又似乎是在逐渐远离喧嚣。 而在最近三年&a…

宝宝入托,爸妈要避开这5种心态

孩子入托&#xff0c;父母也要做好心理准备&#xff0c;尤其需要避免以下5种常见的、不良心理状态&#xff0c;否则会加重孩子入托的困难度。 01.“生离死别式”的入托状态 即每次送孩子入园&#xff0c;就像一场生离死别。宝宝屋里哭&#xff0c;家长屋外哭&#xff0c;最后多…

小孩从小就学习编程,真的有必要吗?

现今&#xff0c;许多面向儿童的计算机教程和编程语言十分风行&#xff0c;那么是否人人都应该从小学计算机呢&#xff1f; 美国前总统奥巴马曾表示&#xff0c;应该“向每个学生提供动手式的计算机科学和数学课程&#xff0c;从一开始就让他们为将来的工作做好准备。”不久&am…

你喜欢读书,还是听书?

前段时间在我的星球里做了一个小调研&#xff0c;我看一些知识付费的课程素材&#xff0c;我发现我的阅读速度&#xff0c;是播放语音效率的5倍以上&#xff0c;十几分钟的语音课程&#xff0c;我看文字可能两分钟就看完了。但我知道&#xff0c;很多人还是更喜欢聆听。 实际上…

小孩厌学,与其说教,不如和他写个游戏

表弟又闹着不去幼儿园了,我得想个办法让他体会到学习的快乐和意义…… 带娃真难 玩了一个周末,玩舒服了,周一起床后,一听要去学校,就不干了,死活不去,对我们各种撒(威)泼(逼)打(利)滚(诱),实在招架不住,只能妥协了,虽然我可以扛起他,塞进校车里,但受过良好…

20本父母必读的亲子教育书籍

作者注&#xff1a;有位好朋友成为母亲没多久&#xff0c;向我提出一个要求&#xff0c;说不知道怎么教孩子&#xff0c;看我是否能帮助推荐一些这方面的书籍。经过一段时间的搜索和整理&#xff0c;给她整理出一套书单&#xff0c;朋友看了后&#xff0c;说受益匪浅。现在她的…

读懂婴幼儿心理学,不要随便责怪孩子

读懂婴幼儿心理学&#xff0c;不要随便责怪孩子 一、不知道孩子在0-6岁时存在各种敏感期&#xff0c;把孩子在敏感期的表现当成不乖的行为斥责孩子&#xff0c;违背了孩子的天性&#xff0c;造成他的痛苦&#xff0c;留下心理隐患。 孩子在0-6岁时存在各种各样的敏感期&a…

和孩子读书学习的一点心得

这是学习笔记的第 2386篇文章 最近带着孩子做了一些实验和游戏&#xff0c;也总结了几个经验和技巧。 #1 小步迭代&#xff0c;做电路实验 最近带着孩子做电路实验&#xff0c;和上一次玩电路实验已经隔了好一段时间&#xff0c; 孩子应该都基本忘了那种感觉了&#xff0c;所以…

读书会招募 | 一起来读《蛤蟆先生去看心理医生》吧

Hello&#xff0c;大家好&#xff0c; 欢迎来到壹脑云读书圈&#xff0c;我是瘦瘦~ 随着国家经济社会的快速发展&#xff0c;人们的心理问题逐渐增多&#xff0c;新冠疫情也对人们的心理健康带来了或多或少的消极影响。 在此背景下&#xff0c;面对心理咨询&#xff0c;一方…

请告诉孩子:努力读书,是为将来拥有更多选择的权利,而不是被迫谋生

请告诉孩子&#xff1a;努力读书&#xff0c;是为将来拥有更多选择的权利&#xff0c;而不是被迫谋生 01 现在的孩子津津乐道于几个文化不高、但事业有成的名人&#xff0c;用于堵住家长苦口婆心的嘴。 然而事实是&#xff0c;这样的人只是少数&#xff0c;大多数不爱学习的…

经常看书的人和不看书的人有什么区别?

只要能做到高效看经典书籍&#xff0c;对个人提升一定是飞快的&#xff01; 其实能坚持每天看书两小书&#xff08;武侠言情之类的杂书除外&#xff09;&#xff0c;已经超过99%的人了。 99%并不夸张&#xff0c;甚至会更多&#xff0c;我们中的很多人除了读书时期会看书&…

外贸大环境下soho人策略

前阵子也跟一个工厂在聊&#xff0c;现在普遍毛利率只有5%-6%&#xff0c;根本不敢涨价&#xff0c;能不降价就不错了&#xff08;汇率在涨&#xff0c;所以有的客户还会要求降价&#xff09;。 卷是一定的。而且&#xff0c;各位如果有了解过拼多多的TEMU业务的&#xff0c;应…

传统外贸B2B企业如何转型为跨境电商B2B

国内传统的外贸B2B产业深度仰赖出口商、代理商、参展等方式&#xff0c;但因为新冠疫情使得传统外贸的秩序被打乱&#xff0c;这对外贸企业有着不小的冲击。因此在政策拉动、市场需求驱动及数字技术进步等多重力量共同作用下&#xff0c;许多传统外贸企业纷纷开始转型跨境电商B…

国内出海企业常见的跨境网络问题分析及解决方案

经济全球化趋势发展得如火如荼&#xff0c;越来越多的中国企业走出国门&#xff0c;兴起包括跨境电商、虚拟商品、游戏出海等新贸易形式。 但在业务开拓过程中&#xff0c;由于远距离传输的特殊性&#xff0c;出海企业经常面临网络传输慢、不稳定、延迟、掉线等网络问题&#x…

B2B外贸行业如何利用TikTok打开海外销售渠道-跨境知道

过去数年&#xff0c;中国供应链能力不断提升&#xff0c;生产物资过剩&#xff0c;移动互联网红利见顶&#xff0c;加上政策因素&#xff0c;越来越多的中国企业开始出海寻求增长。根据海关总署发布的数据显示&#xff1a;2021年&#xff0c;我国货物贸易进出口总值39.1万亿元…

目前我国外贸企业生存现状如何?

今天&#xff0c;最新的进出口贸易数据发布。 海关总署9日公布的数据显示&#xff0c;今年前4个月&#xff0c;我国进出口总值12.58万亿元&#xff0c;同比增长7.9%。虽然整体增速有所回落&#xff0c;但完全在可控范围内。 但是增速下的外贸企业就不那么好做了&#xff0c;很多…

外贸管理软件的发展现状及趋势分析

目前市场上的外贸管理软件大致分为两类公司&#xff1a;一是侧重于外贸业务流程管控为主&#xff0c;另一类是侧重于前期客户管理为主&#xff1b;接下来我们就主要对这两类公司的现状和未来的发展趋势做下分析&#xff0c;希望对于进行软件选型的企业有所帮助&#xff01; 第一…