UIwebview 内能完成支付宝etc办理流程支付流程吗

今天看啥 热点:
最新最全的支付宝SDK的使用说明,支付宝SDK使用说明
& & & && 现在电商类的应用与日俱增,直接导致了我们需要集成支付宝SDK的功能,从而完成能实现在线支付,手机支付的功能.说到在线支付,手机支付,这里还是有区别的,在线支付,一般指的是用UIWebView显示用于支付的网页,说实话本人感觉这样的用户体验很不好.
& & & &而说到手机支付,现在主要指的就是,用各银行的网银支付,支付宝,财付通等等.相比在线支付,手机支付的用户体验还是比较好的,今天我想说的就是支付宝SDK的使用说明.至于剩下的几种,我会后续博客中补上.
& & & &首先给大家介绍一下,支付宝官方SDK使用步骤&这里边其实已经讲的很详细了,但是可能某些人还是会操作失误.所以下面我还会总结一下:
使用支付宝进行一个完整的支付功能,大致有以下步骤:
1&先与支付宝签约,获得商户ID(partner)和账号ID(seller)
(这个主要是公司的负责)
2&下载相应的公钥私钥文件(加密签名用)
3&下载支付宝SDK(登录网站:/)
里面提供了非常详细的文档、如何签约、如何获得公钥私钥、如何调用支付接口。
4&生成订单信息
5&调用支付宝客户端,由支付宝客户端跟支付宝安全服务器打交道
6&支付完毕后返回支付结果给商户客户端和服务器
SDK里有集成支付宝功能的一个Demo& &集成支付功能的具体操作方式,可以参考Demo
当第一次打开Demo时,可能会出现以下问题:
错误原因很简单,就是项目的部署版本设置太低了,从3.0改为4.3即可
要想集成支付功能,依赖以下文件夹的库文件(把这3个添加到你的客户端中)
调用支付接口可以参考AlixPayDemoViewController的下面方法
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
如何创建订单 ( 订单根据自己公司看是什么样的)
如何调用支付接口
都在这个方法里面了
2 //选中商品调用支付宝快捷支付
4 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
*点击获取prodcut实例并初始化订单信息
Product *product = [_products objectAtIndex:indexPath.row];
*商户的唯一的parnter和seller。
*本demo将parnter和seller信息存于(AlixPayDemo-Info.plist)中,外部商户可以考虑存于服务端或本地其他地方。
*签约后,支付宝会为每个商户分配一个唯一的 parnter 和 seller。
//如果partner和seller数据存于其他位置,请改写下面两行代码
NSString *partner = [[NSBundle mainBundle] objectForInfoDictionaryKey:@&Partner&];
NSString *seller = [[NSBundle mainBundle] objectForInfoDictionaryKey:@&Seller&];
//partner和seller获取失败,提示
if ([partner length] == 0 || [seller length] == 0)
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@&提示&
message:@&缺少partner或者seller。&
delegate:self
cancelButtonTitle:@&确定&
otherButtonTitles:nil];
[alert show];
[alert release];
*生成订单信息及签名
*由于demo的局限性,本demo中的公私钥存放在AlixPayDemo-Info.plist中,外部商户可以存放在服务端或本地其他地方。
//将商品信息赋予AlixPayOrder的成员变量
AlixPayOrder *order = [[AlixPayOrder alloc] init];
order.partner =
order.seller =
order.tradeNO = [self generateTradeNO]; //订单ID(由商家自行制定)
order.productName = product. //商品标题
order.productDescription = product. //商品描述
order.amount = [NSString stringWithFormat:@&%.2f&,product.price]; //商品价格
order.notifyURL =
@&&; //回调URL
//应用注册scheme,在AlixPayDemo-Info.plist定义URL types,用于快捷支付成功后重新唤起商户应用
NSString *appScheme = @&AlixPayDemo&;
//将商品信息拼接成字符串
NSString *orderSpec = [order description];
NSLog(@&orderSpec = %@&,orderSpec);
//获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode
id&DataSigner& signer = CreateRSADataSigner([[NSBundle mainBundle] objectForInfoDictionaryKey:@&RSA private key&]);
NSString *signedString = [signer signString:orderSpec];
//将签名成功字符串格式化为订单字符串,请严格按照该格式
NSString *orderString =
if (signedString != nil) {
orderString = [NSString stringWithFormat:@&%@&sign=\&%@\&&sign_type=\&%@\&&,
orderSpec, signedString, @&RSA&];
//获取快捷支付单例并调用快捷支付接口
AlixPay * alixpay = [AlixPay shared];
int ret = [alixpay pay:orderString applicationScheme:appScheme];
if (ret == kSPErrorAlipayClientNotInstalled) {
UIAlertView * alertView = [[UIAlertView alloc] initWithTitle:@&提示&
message:@&您还没有安装支付宝快捷支付,请先安装。&
delegate:self
cancelButtonTitle:@&确定&
otherButtonTitles:nil];
[alertView setTag:123];
[alertView show];
[alertView release];
else if (ret == kSPErrorSignError) {
NSLog(@&签名错误!&);
[tableView deselectRowAtIndexPath:indexPath animated:YES];
主要集成的关键就是下面几步:
//.封装订单模型
AlixPayOrder *order = [[AlixPayOrder alloc] init];
// 生成订单描述
NSString *orderSpec = [order description];
id&DataSigner& signer = CreateRSADataSigner(@“私钥key”);
// 传入订单描述 进行 签名
NSString *signedString = [signer signString:orderSpec];
//3.生成订单字符串
NSString *orderString = [NSString stringWithFormat:@&%@&sign=\&%@\&&sign_type=\&%@\&&,
orderSpec, signedString, @&RSA&];
//4.调用支付接口
AlixPay * alixpay = [AlixPay shared];
// appScheme:商户自己的协议头
int ret = [alixpay pay:orderString applicationScheme:appScheme];
& & & & 希望能跟大家交流学习,所以有什么问题,或者建议,欢迎评论留言给我.
你去下一个支付宝的DEMO里有源码怎么启动的,其实也就是封装intent就可以启动你想要启动的应用,支付宝里做的复杂一点,用启动服务的方式启动的
查看原帖&&
去下载一个最新的修复版SDK,梅露可物语bilibili服论坛有下载的
相关搜索:
相关阅读:
相关频道:
Android教程最近更新2467人阅读
国内私募机构九鼎控股打造APP,来就送&20元现金领取地址:内部邀请码:C8E245J&(不写邀请码,没有现金送)国内私募机构九鼎控股打造,九鼎投资是在全国股份转让系统挂牌的公众公司,股票代码为430719,为“中国PE第一股”,市值超1000亿元。&--------------------------------------------------------原文地址:/blog//inside-alipay-plugin.html昨天看到唐巧,今天也趁热打铁研究了一下支付宝插件的结构和代码,很多时候逆向思考也可以为自己积累很多有用的经验(即便实际实现方式和自己所想有出入)。承接唐巧的上文,本文同样以彩票插件为例,如果你没有下载该插件的压缩包,用如下命令下载。wget /mobilecsprod/alipay.mobile/32806/xlarge/.amr
并改为 zip 后缀,解压。根目录CERT:内容为各文件的特征值,特征值可以是重复 hash 和 salt 多次后 base64 的结果,解压插件后支付宝理应检查文件特征值以确定来源可靠Manifest.xml:插件的描述文件,都有注释,易懂,其中定义了业务包 ID、名称、介绍、版本等信息,也定义了版本兼容性、能力集、依赖关系、入口文件等resres:资源文件,仅有图标,奇怪的是代表 Android 尺寸的目录下没有文件,可能因为唐巧抓的包是 iOS 的?wwwwww:前端代码,目录结构跟一般 Web 开发相似,其中 demo 下是 HTML 代码demodemo:HTML 代码,子目录都是拼音缩写,比如 ssq 代表双色球,根据&Manifest.xml&描述,index-alipay-native.html&为插件入口页面cp唐巧打开&index-alipay-native.html&给大家看过了,你会发现 Cells 都是不能点的,因为页面尚未初始化,代码中可以看到形似&&a rel=&ssq/ssqbet.html&&&的代码。显然这代表双色球的子页面,我简单猜测一下用 rel 的原因:首先,点击 Cell 在客户端触发的必然是 Native 的&pushViewController:,用 href 同样可以通过webView:shouldStartLoadWithRequest:navigationType:&触发,但这样会在某些意外情况下造成点击后页面直接跳转。此外如果最终是用形如&push:///ssq/ssqbet.html&的协议来实现 Native 跳转,用 rel 再注入 JS 处理可以防止客户端逻辑的显式暴露(如长按、拷贝,曾经的新浪微博客户端长按评论可以看到类似 comment:// 的协议,不见得有多大危害,但是值得避免)页面底部有如下代码:1
//配置时间戳,解决浏览器或者webview cache问题
seajs.config({
[ /^(.*\.(?:css|js))(.*)$/i, '$1?000021']
function onDeviceReady(){
seajs.use('../js/appnav/nav',function(Nav){
Nav.initialize();
略懂前端开发的话,果断猜测&onDeviceReady()&是在页面加载完毕后,由设备调用的初始化方法,于是尝试在 Console 中输入onDeviceReady()&执行,点击 Cell,报错如下:onDeviceReady跟到&nav.js&里可以看到是在&pushWindow&中报错的,错误为&alipay&未定义,粗略判断&alipay&为客户端注入的变量,这里看到的调用形如&alipay.navigation.pushWindow(obj.attr('rel'))&用到了上述&rel&属性,最终应该会触发客户端类似&[self pushWebControllerWithURL:url]&的代码来推入下一个 VC,这位我们最终尝试实现能跑这个插件的 Demo 提供了一些思路。用&onDeviceReady&可以完成大部分页面的初始化工作,如&ssq/ssqbet.html,在浏览器里也能响应下拉机选操作,你会发现,这些插件的屏幕尺寸兼容性和浏览器兼容性极佳:ssqbet再如&jczq/jczqmatch.html,甚至可以读到场次数据并完成数据初始化了jczq在这里我们又发现了两个有意思的信息,它们被写在 meta 信息里,根据字面,很容易理解,它们分别定义了&navigationBar&的title&和&rightBarButtonItem,以及点击&rightBarButtonItem&触发的 JS 函数。此时你如果比对着使用客户端就知道这个筛选对应着怎样的表现和交互,这些都为我们写 Demo 提供了线索。尝试在 Console 输入&rightBar(不带括号)查看其定义,又能得到很多有用的线索,比如点击&rightBarButtonItem&触发的是推入filterpage,这个&filterpage&则是在&js/jczq/jczqmatch.js&中定义的。jczq此外,结合&jczqfilter.html&的内容和&rightBar&函数,可以看到主页面利用 HTML5 的 localStorage 为 filter 页面提供了数据(这为纠结于 UIWebView 如何给 push 进来的下一个 View 提供数据的我,提供了很好的思路,值得借鉴)1
localStorage.setItem('__tbcp__filter', JSON.stringify(obj))
不知不觉写了 2 个多小时了,发现通过文字表达出来要比分析本身还费时。不过,至此,支付宝插件的大体框架已经比较清晰了,和 Native Code 的交互方式、数据传递方式也有了一定的思路。接下来的几天我会尝试写一个 Demo 让这样一个插件基本能跑起来(除了核心的下单、支付环节,这显然不是我力所能及的)。跟着我的分析,相信读者对 WebView + Native Code 的混合编程模式应该也有了一些新的认识。希望我有足够的动力和时间写 Demo,因为这个 Demo 可以帮助大家更清楚地理解支付宝插件中用到的 WebView + Native Code 的 Hybrid 开发方式。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1215322次
积分:14989
积分:14989
排名:第735名
原创:302篇
转载:180篇
评论:380条
(9)(4)(1)(12)(4)(3)(5)(10)(5)(1)(4)(5)(11)(3)(5)(25)(19)(3)(10)(23)(21)(16)(2)(3)(6)(3)(2)(2)(1)(6)(2)(5)(1)(1)(2)(1)(5)(2)(5)(1)(1)(3)(5)(1)(4)(3)(1)(4)(3)(7)(9)(2)(2)(2)(4)(2)(7)(10)(1)(19)(13)(3)(10)(7)(7)(1)(9)(8)(7)(3)(7)(6)(7)(3)(5)(3)(8)(16)(28)支付宝app是如何做到不用更新app就可以更改页面内容的? - 知乎78被浏览8030分享邀请回答11添加评论分享收藏感谢收起}

我要回帖

更多关于 违反支付宝交易流程 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信