zoukankan      html  css  js  c++  java
  • 10分钟搞定支付宝和微信支付的各种填坑

    填坑

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

    问题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<char="">, std::1::allocator >::init(char const, unsigned long)", referenced from:

    CAliSecXURL::encodeURIComponent(CAliSecXBuffer&) in AlipaySDK

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

    CAliSecXURL::encodeURIComponent(CAliSecXBuffer&) in AlipaySDK

    "std::1::basic_string<char, std::__1::char_traits<char="">, 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;// 刚第三端命令生成的去头去尾

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

     
     
  • 相关阅读:
    栈和队列
    绪论
    抽象数据类型和python类
    《黑马程序员》流程控制(顺序结构,选择结构,循环结构)(C语言)
    《黑马程序员》C语言中的基本运算(C语言)
    《黑马程序员》C语言中的基本数据类型 (C语言)
    《黑马程序员》 关键字、标示符、注释(C语言)
    获取图片
    文件路径
    文件上传
  • 原文地址:https://www.cnblogs.com/r360/p/5718702.html
Copyright © 2011-2022 走看看