因为ipad应用需要添加支付宝功能
在支付宝论坛http://club.alipay.com/read-htm-tid-9976972.html (2012.11.23更新)
上找到了最新的 无线支付sdk
http://download.alipay.com/public/api/base/WS_SECURE_PAY_SDK.zip
这个界面是检测到没有吧安装支付宝客服端 让我们去选择是否去安装
但是坑爹的 选择取消是跳入web支付界面里去,用户体验是如此的差呀
而iOS支付宝sdk是非源码包 ,无法直接对其功能进行更改
于是想到通过类别去更改他的调用方式
通过调试得到其包含了如下几个类
AlixPaylib
AlixLoadingContral
AlixLoadingView
ALPToastView
AliXImage
Alipay_Reachability
AlixLightRequest
AlixLightRequestQueue
AlixDevice
AlixButtonInfo
再通过runtime
NSString *className = NSStringFromClass([AlixPaylib class]);
const char *cClassName = [classNameUTF8String];
id theClass = objc_getClass(cClassName);
unsigned int outCount;
Method *m = class_copyMethodList(theClass,&outCount);
NSLog(@"函数个数:%d",outCount);
for (int i = 0; i<outCount; i++) {
SEL a = method_getName(*(m+i));
NSString *sn =NSStringFromSelector(a);
NSLog(@"%@",sn);
}
得到了 AlixPaylib 里的49个函数函数
其中 openWebView 数为打开web支付界面的功能
downloadApp 是检测iOS设备商没有支付宝客服端时弹出
创建一个 AlixPaylib 的类别
- ( void ) downloadApp { [ self openWebView ];
}
将本段代码添加入类别里,当没有客服端时,就直接进入web支付界面进行支付
但是后面又发现支付宝sdk不支持横屏,又是一巨坑呀,去官方询问,给回答了一句产品正在改进中,我想你有sdk源码还改得那么慢
所以就又想了一个办法,既然能获取到请求手机支付的网址
[[ AlixPaylib shareLib ] openUrl ]
我就另外建一个UIViewController来显示支付界面,去把他做成支持横屏的
最坑爹的是在web端的输入的账号信息,支付包是保存在本地的,再次进入web支付界面,根本就不需要输入账号密码等信息,还有就是wap回调签名就没验证成功过
程序下载地址:点击打开链接