首先在unity里面的C#脚本里面声明需要调用的OC的函数 这些函数前面要加一行代码 : [DllImport(“__Internal")]
[DllImport ("__Internal")]
private static extern void IOS_alipay();
声明之后 写个按钮在star方法里面触发调用这个方法
Button.onClick.AddListener(IOS_alipay);
然后在xcode里面 新建一个文件 后缀为.mm 把下面这段粘贴进去 :
#import <Foundation/Foundation.h>
extern "C" {
void IOS_alipay()
{
//具体业务逻辑
}
}
然后把这个文件拿出来放到unity项目中 在unity打包之后在xcode中打开项目找到这个.mm文件
修改内容 这里是请求接口
#import <Foundation/Foundation.h>
#import <AlipaySDK/AlipaySDK.h>
#import "AFNetworking.h"
extern "C" {
void IOS_alipay()
{
//具体业务逻辑
NSLog(@"__________________IOS_alipay()____________________");
//1.创建会话管理者
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
//2.封装参数
NSDictionary *dict = @{
@"uid":@"给服务器的参数"
};
[manager GET:@"www.你的加签接口地址.com" parameters:dict success:^(NSURLSessionDataTask * _Nonnull task, id _Nonnull responseObject) {
NSDictionary *dic = (NSDictionary *)responseObject;
NSLog(@"成功 %@",responseObject);
NSString *appScheme = @"你的appScheme";
NSString *orderString = dic[@"errorReason"];
orderString = [orderStringstringByReplacingOccurrencesOfString:@"amp;" withString:@""];
// NOTE: 调用支付结果开始支付
[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
for (int i = 0; i<resultDic.allKeys.count; i++) {
NSLog(@"%@",resultDic.allKeys[i]);
NSLog(@"%@",resultDic[resultDic.allKeys[i]]);
}
}];
}failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"失败 %@",error);
}];
}
}
然后开始导入集成支付宝必备的文件
先把这4个文件添加到项目中
我自己又导入了AFN和jsonmodel 方便网络请求
在Build Phases选项卡的Link Binary With Libraries中,增加以下依赖 这些都要添加 :
在info里面的URL Type新加一个URL Schemes
这个URL Schemes要和上面IOS_alipay方法里面的appScheme一样
NSString *appScheme = @“你的appScheme";
从支付宝返回来需要这个参数
在需要调用AlipaySDK的文件中,增加头文件引用。
#import <AlipaySDK/AlipaySDK.h>
在 UnityAppController.m里面 加一段代码
// NOTE: 9.0以后使用新API接口
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options
{
if ([url.host isEqualToString:@"safepay"]) {
// 支付跳转支付宝钱包进行支付,处理支付结果
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
for (int i = 0; i<resultDic.allKeys.count; i++) {
NSLog(@"key = %@",resultDic.allKeys[i]);
NSLog(@"value = %@",resultDic.allValues[i]);
}
NSLog(@"result = %@",resultDic);
}];
// 授权跳转支付宝钱包进行支付,处理支付结果
[[AlipaySDK defaultService] processAuth_V2Result:url standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",resultDic);
// 解析 auth code
NSString *result = resultDic[@"result"];
NSString *authCode = nil;
if (result.length>0) {
NSArray *resultArr = [result componentsSeparatedByString:@"&"];
for (NSString *subResult in resultArr) {
if (subResult.length > 10 && [subResult hasPrefix:@"auth_code="]) {
authCode = [subResultsubstringFromIndex:10];
break;
}
}
}
NSLog(@"授权结果 authCode = %@", authCode?:@"");
}];
}
return YES;
}
并且在
- (BOOL)application:(UIApplication*)application openURL:(NSURL*)url sourceApplication:(NSString*)sourceApplication annotation:(id)annotation
方法里面 添加:
if ([url.host isEqualToString:@"safepay"]) {
// 支付跳转支付宝钱包进行支付,处理支付结果
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",resultDic);
}];
// 授权跳转支付宝钱包进行支付,处理支付结果
[[AlipaySDK defaultService] processAuth_V2Result:url standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",resultDic);
// 解析 auth code
NSString *result = resultDic[@"result"];
NSString *authCode = nil;
if (result.length>0) {
NSArray *resultArr = [result componentsSeparatedByString:@"&"];
for (NSString *subResult in resultArr) {
if (subResult.length > 10 && [subResult hasPrefix:@"auth_code="]) {
authCode = [subResultsubstringFromIndex:10];
break;
}
}
}
NSLog(@"授权结果 authCode = %@", authCode?:@"");
}];
}
然后集成就完成了 编译会遇到各种小bug 自己可以百度解决
2018年12月17日12:06:59