文档章节

iOS微信支付_第三节_集成技术前的准备(从申请到集成)

iOSyuhong
 iOSyuhong
发布于 2016/01/28 22:24
字数 746
阅读 72
收藏 1

1.需要准备3个东西

AppID、AppSecret 官网链接:

https://open.weixin.qq.com

AppID (开发者平台创建应用的时候获取)

AppSecret  (开发者平台创建应用的时候获取)

商户密钥key 官网链接:

https://pay.weixin.qq.com/index.php/home/login?return_url=%2Findex.php%2Fapply_bank

商户密钥key   (在商户平台里面设置)


2.集成前导入微信支付SDK

SDK下载地址

https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419319164&token=&lang=zh_CN

添加需要的库

1>coreTelehony.framework

2>libz

3>libstdc++

4>libsqlite3


3.设置白名单( 跟有没有安装微信客户端有关 )和设置URL Types

3.1.在info.plist 加  LSApplicationQueriesSchemes (Array属性)  
3.2. 然后在LSApplicationQueriesSchemes 下面加weixin  加 wechat (string属性) 

3.3.设置URL为微信支付里面的AppID


4.引用头文件 

AppID、appsecret

 https://open.weixin.qq.com

#pragma mark - 微信支付

#import "WXApi.h"

#import "WXApiObject.h"

#define kWX_AppID            @"申请微信支付应用的时候已经返回了"

#define kWX_AppSecret        @"申请微信支付应用的时候已经返回了"


/** 设备号 */

#define IPhone_deviceNumber NSString *identifierForVendor = [[UIDevice currentDevice].identifierForVendor UUIDString]

/** 手机IP地址 */

#import "getIPhoneIP.h"

/** 客户端生成sign */(可以不需要)

#import "DataMD5.h"(可选,这个是客户端自己生成的sign,这里我生成的签名不正确,所以我交给了服务器做处理.以后有机会再研究吧)

/** 客户端生成sign */

#import "XMLDictionary.h"

#import <CommonCrypto/CommonDigest.h>

#import "MJExtension.h"

#import "WeChatSignParams.h"


手机IP地址 工具类 (Wi-Fi和3G网络都能进行支付)

#import <Foundation/Foundation.h>

@interface getIPhoneIP : NSObject
+(NSString *)getIPAddress;
+ (NSString *)getIPAddress:(BOOL)preferIPv4;
@end
#import "getIPhoneIP.h"

#include <ifaddrs.h>
#include <arpa/inet.h>
#include <net/if.h>

#define IOS_CELLULAR    @"pdp_ip0"
#define IOS_WIFI        @"en0"
#define IOS_VPN         @"utun0"
#define IP_ADDR_IPv4    @"ipv4"
#define IP_ADDR_IPv6    @"ipv6"

@implementation getIPhoneIP
//create by huangys (这个获取IP地址只能用于Wi-Fi使用,如果使用3g网络,微信支付会出现支付不了效果)
//+(NSString *)getIPAddress {
//    NSString *address = @"error";
//    struct ifaddrs *interfaces = NULL;
//    struct ifaddrs *temp_addr = NULL;
//    int success = 0;
//    // retrieve the current interfaces - returns 0 on success
//    success = getifaddrs(&interfaces);
//    if (success == 0) {
//        // Loop through linked list of interfaces
//        temp_addr = interfaces;
//        while(temp_addr != NULL) {
//            if(temp_addr->ifa_addr->sa_family == AF_INET) {
//                // Check if interface is en0 which is the wifi connection on the iPhone
//                if([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"]) {
//                    // Get NSString from C String
//                    address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)];
//                }
//            }
//            temp_addr = temp_addr->ifa_next;
//        }
//    }
//    // Free memory
//    freeifaddrs(interfaces);
//    return address;
//}

+ (NSString *)getIPAddress:(BOOL)preferIPv4
{
    NSArray *searchArray = preferIPv4 ?
    @[ IOS_VPN @"/" IP_ADDR_IPv4, IOS_VPN @"/" IP_ADDR_IPv6, IOS_WIFI @"/" IP_ADDR_IPv4, IOS_WIFI @"/" IP_ADDR_IPv6, IOS_CELLULAR @"/" IP_ADDR_IPv4, IOS_CELLULAR @"/" IP_ADDR_IPv6 ] :
    @[ IOS_VPN @"/" IP_ADDR_IPv6, IOS_VPN @"/" IP_ADDR_IPv4, IOS_WIFI @"/" IP_ADDR_IPv6, IOS_WIFI @"/" IP_ADDR_IPv4, IOS_CELLULAR @"/" IP_ADDR_IPv6, IOS_CELLULAR @"/" IP_ADDR_IPv4 ] ;
    
    NSDictionary *addresses = [self getIPAddresses];
    YHLog(@"addresses: %@", addresses);
    
    __block NSString *address;
    [searchArray enumerateObjectsUsingBlock:^(NSString *key, NSUInteger idx, BOOL *stop)
     {
         address = addresses[key];
         if(address) *stop = YES;
     } ];
    return address ? address : @"0.0.0.0";
}

+ (NSDictionary *)getIPAddresses
{
    NSMutableDictionary *addresses = [NSMutableDictionary dictionaryWithCapacity:8];
    
    // retrieve the current interfaces - returns 0 on success
    struct ifaddrs *interfaces;
    if(!getifaddrs(&interfaces)) {
        // Loop through linked list of interfaces
        struct ifaddrs *interface;
        for(interface=interfaces; interface; interface=interface->ifa_next) {
            if(!(interface->ifa_flags & IFF_UP) /* || (interface->ifa_flags & IFF_LOOPBACK) */ ) {
                continue; // deeply nested code harder to read
            }
            const struct sockaddr_in *addr = (const struct sockaddr_in*)interface->ifa_addr;
            char addrBuf[ MAX(INET_ADDRSTRLEN, INET6_ADDRSTRLEN) ];
            if(addr && (addr->sin_family==AF_INET || addr->sin_family==AF_INET6)) {
                NSString *name = [NSString stringWithUTF8String:interface->ifa_name];
                NSString *type;
                if(addr->sin_family == AF_INET) {
                    if(inet_ntop(AF_INET, &addr->sin_addr, addrBuf, INET_ADDRSTRLEN)) {
                        type = IP_ADDR_IPv4;
                    }
                } else {
                    const struct sockaddr_in6 *addr6 = (const struct sockaddr_in6*)interface->ifa_addr;
                    if(inet_ntop(AF_INET6, &addr6->sin6_addr, addrBuf, INET6_ADDRSTRLEN)) {
                        type = IP_ADDR_IPv6;
                    }
                }
                if(type) {
                    NSString *key = [NSString stringWithFormat:@"%@/%@", name, type];
                    addresses[key] = [NSString stringWithUTF8String:addrBuf];
                }
            }
        }
        // Free memory
        freeifaddrs(interfaces);
    }
    return [addresses count] ? addresses : nil;
}

@end






© 著作权归作者所有

iOSyuhong
粉丝 1
博文 11
码字总数 4377
作品 0
朝阳
私信 提问
iOS APP上架App Store流程

上架iOS需要一个付费688的开发者账号,还没有的话申请一个或者借用。 申请苹果开发者账号教程 上架App Store之前是先安装到苹果手机测试调试好,app能正常运行再上架 iOS真机调试测试教程 上...

Code辉
2018/12/04
0
0
Phonegap各类商业插件

【Phonegap商业插件服务】[目前插件已经支持到Phonegap最新版本] 1.phonegap-百度社会化分享-andriod插件 v2.0 【该插件支持微信分享和朋友圈分享,qq好友分享,微博分享】 2.phonegap百度社...

夜澜小雨
2015/07/15
1K
0
Android项目实战(五十):微信支付 坑总结

大部分APP必备需求,使用总结  Android接入文章在此:官方文档   文档很简单,Android分为四步: 1、后台配置 2、Android 内 注册appId 3、Android 内 调起支付 4、Android 内 支付结果回...

听着music睡
2018/08/30
0
0
IOS集成微信支付/支付宝支付并提供简洁调用接口

1. IOS集成微信支付/支付宝支付 2. 提供简洁调用接口 3. 代码托管在 git.ochina.net

SDK4
2017/08/09
2
0
谷歌Flutter跨平台应用开发SDK迎来首个发行预览版本

谷歌Flutter跨平台应用开发SDK迎来首个发行预览版本 2018-06-22 12:26编辑: 枣泥布丁分类:程序人生来源:程序师 跨平台Google Flutter预览版本 招聘信息: 图像处理及模式识别工程师 C/C+...

枣泥布丁
2018/06/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Kernel DMA

为什么会有DMA(直接内存访问)?我们知道通常情况下,内存数据跟外设之间的通信是通过cpu来传递的。cpu运行io指令将数据从内存拷贝到外设的io端口,或者从外设的io端口拷贝到内存。由于外设...

yepanl
今天
3
0
hive

一、hive的定义: Hive是一个SQL解析引擎,将SQL语句转译成MR Job,然后再在Hadoop平台上运行,达到快速开发的目的 Hive中的表是纯逻辑表,就只是表的定义,即表的元数据。本质就是Hadoop的目...

霉男纸
今天
3
0
二、Spring Cloud—Eureka(Greenwich.SR1)

注:本系列文章所用工具及版本如下:开发工具(IDEA 2018.3.5),Spring Boot(2.1.3.RELEASE),Spring Cloud(Greenwich.SR1),Maven(3.6.0),JDK(1.8) Eureka: Eureka是Netflix开发...

倪伟伟
昨天
8
0
eclipse常用插件

amaterasUML https://takezoe.github.io/amateras-update-site/ https://github.com/takezoe/amateras-modeler modelGoon https://www.cnblogs.com/aademeng/articles/6890266.html......

大头鬼_yc
昨天
4
0
centos7修改命令行或图形界面启动模式

1.systemctl get-default命令获取当前模式 2.systemctl set-default graphical.target 修改启动模式(修改为图形界面,要是修改为命令行就multi-user.target) 2.systemctl set-default multi-...

大圣39
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部