关闭

搞定支付宝和微信支付的各种填坑

984人阅读 评论(0) 收藏 举报
分类:

填坑

支付宝填坑是每个接入支付宝必经之路,下面是我接入支付宝遇到的问题汇总,希望大家在接入的路上少一点弯路。

问题1. Util/base64.h:63:21: Cannot find interface declaration for ‘NSObject’, superclass of ‘Base64’

解决办法:

这是base64.h中没有加入#import 系统库文件导致,这个错误报错方法直接想喷它一脸。报错方式太恶心。

问题2.截图告知你什么问题

616981-d6540c725f3801a4.jpg

解决办法:

这个问题可以同上的,心情好,截图再次说明下,在 openssl_wrapper.h中#import 库即可

问题3.Util/openssl_wrapper.m:11:9: ‘rsa.h’ file not found

解决办法:

(1)万年老坑,只要你接入支付宝百分百要遇到的问题,所以习以为常吧

(2)在Build setting中搜索search,找到Header Search Paths,添加$(PROJECT_DIR)/openssl和$(PROJECT_DIR) 如下图:

(3)重要问题说三遍,这是网络找到的到答案后继续有同样的坑,自己的解决方案,

Header Search Paths $(PROJECT_DIR)/ali中输入这个

Framework Search Paths 和 Library Search Paths 继续是$(inherited) 和 $(PROJECT_DIR)/ali

‘rsa.h’ file not found的解决方案

(4)由于后期多项目的接入,让我知道一个算是万能方法吧,就是始终保持Header Search Paths 和 Library Search Paths 都能找到你导入的openssl的正确路径即可,已尝试多遍,是能解决以上问题(求黑)

616981-b71f879b0c85fb6a.jpg

616981-e833ce4b6bd3cb57.jpg

问题4. 这类错很多,大概有这些:这些可能是库文件没有导入,导致的

“_CNCopyCurrentNetworkInfo”, referenced from:

Undefined symbols for architecture x86_64:

"CNCopyCurrentNetworkInfo", referenced from:

-[APayReachability wifiInterface] in AlipaySDK

+[internal_DeviceInfo getSSIDInfo] in AlipaySDK

+[internal_DeviceInfo getNetworkInfo] in AlipaySDK

"_CNCopySupportedInterfaces", referenced from:

-[APayReachability wifiInterface] in AlipaySDK

+[internal_DeviceInfo getSSIDInfo] in AlipaySDK

+[internal_DeviceInfo getNetworkInfo] in AlipaySDK

"_CTRadioAccessTechnologyCDMA1x", referenced from:

-[AliSecXReachability networkStatusForFlags:] in AlipaySDK

"_CTRadioAccessTechnologyEdge", referenced from:

-[AliSecXReachability networkStatusForFlags:] in AlipaySDK

"_CTRadioAccessTechnologyGPRS", referenced from:

-[AliSecXReachability networkStatusForFlags:] in AlipaySDK

"_CTRadioAccessTechnologyLTE", referenced from:

-[AliSecXReachability networkStatusForFlags:] in AlipaySDK

"_OBJC_CLASS$_CMMotionManager", referenced from:

objc-class-ref in AlipaySDK

"OBJC_CLASS$_CTTelephonyNetworkInfo", referenced from:

objc-class-ref in AlipaySDK

"SCNetworkReachabilityCreateWithAddress", referenced from:

+[APayReachability reachabilityWithAddress:] in AlipaySDK

+[AliSecXReachability reachabilityWithAddress:] in AlipaySDK

"_SCNetworkReachabilityCreateWithName", referenced from:

+[APayReachability reachabilityWithHostname:] in AlipaySDK

+[AliSecXReachability reachabilityWithHostName:] in AlipaySDK

"_SCNetworkReachabilityGetFlags", referenced from:

-[APayReachability isReachable] in AlipaySDK

-[APayReachability isReachableViaWWAN] in AlipaySDK

-[APayReachability isReachableViaWiFi] in AlipaySDK

-[APayReachability connectionRequired] in AlipaySDK

-[APayReachability isConnectionOnDemand] in AlipaySDK

-[APayReachability isInterventionRequired] in AlipaySDK

-[APayReachability reachabilityFlags] in AlipaySDK

...

"_SCNetworkReachabilityScheduleWithRunLoop", referenced from:

-[AliSecXReachability startNotifier] in AlipaySDK

"_SCNetworkReachabilitySetCallback", referenced from:

-[APayReachability startNotifier] in AlipaySDK

-[APayReachability stopNotifier] in AlipaySDK

-[AliSecXReachability startNotifier] in AlipaySDK

"_SCNetworkReachabilitySetDispatchQueue", referenced from:

-[APayReachability startNotifier] in AlipaySDK

-[APayReachability stopNotifier] in AlipaySDK

"_SCNetworkReachabilityUnscheduleFromRunLoop", referenced from:

-[AliSecXReachability stopNotifier] in AlipaySDK

"std::1::basic_string<char, std::1::char_traits, std::1::allocator >::init(char const, unsigned long)", referenced from:

CAliSecXURL::encodeURIComponent(CAliSecXBuffer&) in AlipaySDK

"std::1::basic_string<char, std::1::char_traits, std::1::allocator >::reserve(unsigned long)", referenced from:

CAliSecXURL::encodeURIComponent(CAliSecXBuffer&) in AlipaySDK

"std::1::basic_string<char, std::__1::char_traits, std::__1::allocator >::~basic_string()", referenced from:

CAliSecXURL::encodeURIComponent(CAliSecXBuffer&) in AlipaySDK

"std::nothrow", referenced from:

CAliSecXBuffer::CAliSecXBuffer(unsigned long) in AlipaySDK

CAliSecXBuffer::_copy(unsigned char const, unsigned long) in AlipaySDK

CAliSecXBuffer::resize(unsigned long) in AlipaySDK

"std::terminate()", referenced from:

clang_call_terminate in AlipaySDK

"operator delete", referenced from:

CAliSecXBuffer::~CAliSecXBuffer() in AlipaySDK

CAliSecXBuffer::release() in AlipaySDK

CAliSecXBuffer::~CAliSecXBuffer() in AlipaySDK

CAliSecXBuffer::operator=(CAliSecXBuffer const&) in AlipaySDK

CAliSecXBuffer::resize(unsigned long) in AlipaySDK

alisec_crypto_Hex2Bin(CAliSecXBuffer const&) in AlipaySDK

alisec_crypto_Bin2Hex(CAliSecXBuffer const&) in AlipaySDK

...

"operator new", referenced from:

CAliSecXBuffer::CAliSecXBuffer(unsigned long) in AlipaySDK

CAliSecXBuffer::_copy(unsigned char const*, unsigned long) in AlipaySDK

CAliSecXBuffer::resize(unsigned long) in AlipaySDK

"cxa_begin_catch", referenced from:

clang_call_terminate in AlipaySDK

"gxx_personality_v0", referenced from:

+[ASSStorageAccesser saveStorageModel:] in AlipaySDK

+[ASSStorageAccesser loadStorageModelFromKeychain] in AlipaySDK

+[ASSStorageAccesser loadPreviousApdid] in AlipaySDK

+[ASSStorageAccesser getRandomizedID] in AlipaySDK

+[ASSStorageAccesser getNewRadomizedID] in AlipaySDK

+[ASSStorageAccesser loadLastLoginTime] in AlipaySDK

+[ASSStorageAccesser saveCurrentLoginTime:] in AlipaySDK

...

"_deflate", referenced from:

+[ASSCommonUtils gzipData:] in AlipaySDK

+[DTGZipUtil compressGZip:] in AlipaySDK

"_deflateEnd", referenced from:

+[ASSCommonUtils gzipData:] in AlipaySDK

+[DTGZipUtil compressGZip:] in AlipaySDK

"_deflateInit2", referenced from:

+[ASSCommonUtils gzipData:] in AlipaySDK

+[DTGZipUtil compressGZip:] in AlipaySDK

"_kCNNetworkInfoKeyBSSID", referenced from:

+[UIDevice(APEX) networkDic] in AlipaySDK

"_kCNNetworkInfoKeySSID", referenced from:

+[UIDevice(APEX) networkDic] in AlipaySDK

ld: symbol(s) not found for architecture x86_64

clang: error: linker command failed with exit code 1 (use -v to see invocation)

解决办法:

这种问题通过在General->Link Framework and Libraiies中添加以下framework解决:

- libz.tbd

- libc++.tbd

- Security.framework

- CoreMotion.Framework

- CFNetwork.framework

- CoreTelephony.framework

- SystemConfiguration.framework

截图如下,由于公司同时接入支付宝和微信支付,所以导入的库就多了点咯:

616981-2e9fde123b91a6d5.jpg

问题5. Redefinition of 'RSA' as different kind of symbol 多为sdk集成时产生的坑,因为我们公司在集成支付宝之前,有用过RSA加密,导致重名问题

解决办法:

(1)这个问题不是每个公司都可能遇到的,但遇到也心烦

(2)由于支付宝中的openssl中的rsa.h文件与RSA加密有重名冲突。改掉公司自己之前导入RSA的命名,如果你牛逼也可以去改rsa.h中的

问题6. 系统库导入问题

+++++++++++++

symbol(s) not found for architecture arm64

1464167743266924.png

解决办法:

就是导入系统库了

616981-3a750ed6a81bdc43.jpg

问题7:终于到微信了,接入微信,你就开心了

因为问题太少了,只能感谢下这两个帖子的楼主了

解决办法:

使用微信支付SDK1.5版本的支付demo

微信支付如果遇到跳转只有一个确定请看这里

为了一些懒人懒的去看帖子,简单说,就是微信支付注册放在友盟分享之后就ok了!

代码示例:

1
2
3
4
// 友盟分享
    [self configUmengShare];
//向微信注册
    [WXApi registerApp:@"wxb4ba3c02aa476ea1" withDescription:@"demo 2.0"];

问题7:拉起支付宝报错:交易订单处理失败,请稍后再试(ALI64)

解决办法:

重新生成私钥和公钥,执行步骤如下个问题

问题8:支付宝要重新生成私钥和公钥,并上传修改公钥 -- 为你补充

解决办法:

RSA密钥生成命令步骤如下:

(1)先在终端键入 openssl

生成RSA私钥

(2)openssl>genrsa -out rsa_private_key.pem 1024

生成RSA公钥

(3)openssl>rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

将RSA私钥转换成PKCS8格式

(4)openssl>pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt

注意:“>”符号后面的才是需要输入的命令。

使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
WuTiandeiMac:FPHClientNew wutianshi$ openssl
OpenSSL>
OpenSSL>
OpenSSL>
OpenSSL>
OpenSSL> genrsa -out rsa_private_key.pem 1024
Generating RSA private key, 1024 bit long modulus
....................++++++
.........++++++
e is 65537 (0x10001)
OpenSSL> rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
writing RSA key
OpenSSL>
OpenSSL>
OpenSSL> pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt
-----BEGIN PRIVATE KEY-----
MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBANOjnFDIjeQjyah1
1smthHNsiHyXE8EOWMyMZkLrIlbu6TCDVHk/hhJTpbDxVOz6f4cFdynP/wD9Tbnf
ZfJCKFDFJ9jPz3Euyb5/jLFbyAVblyLLPiv5bxRLaA9/w4Jtt+G7E/ti8HN6224x
4TT3owFuKqZTcAXeqXp7QMzZyEkZAgMBAAECgYBWYKRf5DrlLiYT92Rek89HPLjI
APEzDiP3+CWUkltFl+Tcw/0qL18NA87QVO8QeXyrIvPrwNSXFssuXZtCMPY6oqgh
21ixQ+w4Kk4Z8nkEbFNRjryrpOeGMQmZlkSqRiehnYPY6UT8ovKXj0D1HBoscfA7
z1Ioxpo3QEN3jsxkcQJBAPbgYhJYS7+/HB92eXaHckTpU0/ycosSj6ha02xs5+Sv
xJbkkDfrt/LVVgApBYlgJQG0WRcD/8+4cIyyAxGFp7MCQQDbdduyrvUTffsXeuad
XcHIAmX928y19YGvCU3+TJtGIfUMPoRsnidMnZh2s29G6bGy0fkrmMadogEkKqQX
AmYDAkBEmbdGx7hM0Oscpww7bonHMlrPNVy03nSC4LItR9nsRxdGor6ce2jDFpru
MnfyY4AFCDtVVOwpqWPFBNYrcUtXAkEAltAme2OKHawMmnUl9+zPV1B2oH6k7kJZ
rVy6kVA5wHdje9eWj0IcBaWjeacTiGreZ+Gt1sz1aKxFFoKLIxjN2wJADlpg/9iN
Bf+JylK9QEgOTw6PngSOiXeaVXdErOPbu4WkzvxhB0bm8HPEPiJpLg/3sNaaX3ou
TIEHO8o1EcEnrw==
-----END PRIVATE KEY-----
OpenSSL>

生成的文件:

616981-bf1bd390c88ef9da.png

把公钥上传到支付宝,然后把pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt 这条命令产生的私钥用在下面设置中就好

然后设置

1
2
3
4
5
6
7
8
9
10
11
/*
*商户的唯一的parnter和seller。
*签约后,支付宝会为每个商户分配一个唯一的 parnter 和 seller。
*/
/*============================================================================*/
/*=======================需要填写商户app申请的===================================*/
/*============================================================================*/
NSString *partner = PartnerID;//合作伙伴身份(PID):
NSString *seller = SellerID;//商户支付宝账户
//获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode
NSString *privateKey = PartnerPrivKey;// 刚第三端命令生成的去头去尾

如有问题,继续分享咯,总结才能让问题越来越少!

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

iOS开发技巧之: iOS 集成支付宝和微信支付

最近因为项目需要,需要接入移动支付,下面就根据我们项目集成支付的过程做一个简单总结,包括集成支付宝和微信的大体流程,在集成的过程中遇到的问题以及支付宝和微信支付的简单比较,本人水平有限,如果大家觉得有...
  • vkooy
  • vkooy
  • 2017-03-23 13:36
  • 904

微信支付遇到的坑

1.首先,根据开发文档,申请APP_ID(至于怎么获得签名,这个下个签名工具就可以了) 获得了APP_ID之后,支付和分享都需要用到。此时分享就可以直接使用了。但是支付还需要申请。(如果此时微信分享不...
  • u012975370
  • u012975370
  • 2016-03-24 14:13
  • 1992

java版+支付宝支付和微信支付(一)

最近公司在做支付模块,在接入过程中遇到了很多坑,费了不少事,现在分享一下接入方法,也记录一下,以后可能还用的到。用的是支付宝的即时到帐支付功能和微信的扫码支付功能,相比起来,个人感觉支付宝的文档和接入...
  • qukaiwei
  • qukaiwei
  • 2016-12-29 15:36
  • 11053

iOS-支付宝&微信支付

一. 微信支付 1.所需要的材料 微信SDK 微信SDK在微信开放平台上面申请得到的参数 // 应用的APPID kWXAppID @"wxc82cXXXXXXXX" //...
  • u011452278
  • u011452278
  • 2017-06-02 18:00
  • 2494

快速集成微信支付和支付宝支付

本文介绍博主自己封装的一个微信支付和支付宝支付的library apppay_library:https://github.com/Mingwei360/apppay 本项目解决的问题仅限于最后的支付...
  • u013045971
  • u013045971
  • 2015-09-28 20:47
  • 5905

谈谈那些年微信支付踩过的坑

很早的时候就想写这篇文章了,作为BAT中的一员,还真不想吐槽它,免得被人身攻击。有人说,微信支付很简单嘛,官网有例子,网上也有现成的例子,不过谁用谁知道,本人也是在深入了解之后,真心觉得微信支付里的坑...
  • Baple
  • Baple
  • 2017-06-02 09:44
  • 1088

PayDemo - 支付宝和微信支付两种方式集成

本博客转载于这个地址:http://www.open-open.com/lib/view/open1451631618823.htmlPayDemo 支付宝和微信支付两种方式集成做这两个支付集成的时...
  • zhou114108
  • zhou114108
  • 2016-08-04 19:21
  • 466

Android 支付宝和微信支付集成

场景 随着移动支付的兴起,在我们的app中,会经常有集成支付的需求.这时候一般都会采用微信和支付宝的sdk 来集成 支付宝支付 在使用支付宝支付的过程中,我们是在服务器端生成订单,客...
  • sun20209527
  • sun20209527
  • 2017-05-04 16:51
  • 1955

PHP微信/支付宝支付接口

微信扫码支付接口开发支付宝即时到帐开发-素材火官网支付接口开发,你只要需要把配制文件中的APPid、KEY等修改为你自己中你申请的时的就可以,傻瓜式操作,无论你是技术大神还是刚入门的小白,只需修改一下...
  • myx15901971932
  • myx15901971932
  • 2016-12-29 10:00
  • 1213

基于Ionic3实现微信支付和支付宝支付

在Ionic应用里实现支付并不难,但是有的坑真是不爬不知道。 一:支付宝支付 网上关于支付宝支付cordova插件真是非常多,但是大多会报一些让你很无语的错误。比如sdk早已过时不是最新的,或者没...
  • liujiawei00
  • liujiawei00
  • 2017-11-23 20:05
  • 4600
    个人资料
    • 访问:128997次
    • 积分:2268
    • 等级:
    • 排名:第19148名
    • 原创:72篇
    • 转载:69篇
    • 译文:23篇
    • 评论:8条