陆风逍遥报价多会上市?

在苹果 App Store 的银联支付中,从用户购买某应用到款项从其银行账户中扣除,后台具体的流程和原理是什么
21:00:01来源: 未知
【CaesarChan的回答(34票)】:
其实从目前签订的银联支付协议来看,跟以往与VISAMASTER所签订的协议并无太大差别。
基本原理和流程大概是这样的:
1.用户在Appstore绑定银行卡,提供验证数据(比如信用卡的有限期,姓名,CVV2等;银联卡的在线支付密码等),苹果会通过这些数据进行一次验证,比如扣除一美元以验证账户验证数据的有效性。(当然是会在后面退回来)。
2.绑定流程完成后,苹果认为你已经将这张卡的支付权限授权给了他,就可以做到传说中的“一键支付”。当然只是传说中的一键支付,在支付的时候还是输入Appstore的ID密码,表示这笔交易是被持卡人授权的。
3.在Appstore下单后,苹果会将之前保存的持卡人验证数据,通过卡组织(银联、Visa/Master)等发起在线授权(类似线下的刷卡交易)交易,在发卡行获准(Approved)后,就可以获准下载这个APP。后续会根据卡组织的要求,发起请款清算流程(如外卡组织)或自动完成清算流程(如银联)。
那么问题来了,保存在苹果的信用卡信息是安全的吗?
我们参考下他们的隐私策略,信用卡信息是有保存的:Apple - Legal
我们收集哪些个人信息 当你创建 Apple ID、申请商业信贷、购买产品、下载软件更新、报名参加 Apple Store 零售店的课程、联系我们或参与在线调查时,我们可能会收集各种信息,包括你的姓名、邮寄地址、电话号码、电子邮件地址、联系方式偏好以及信用卡信息。 当你使用 Apple 产品与家人和朋友分享内容、发送礼券和产品,或邀请他人使用 Apple 服务或论坛时,Apple 可能会收集你提供的与上述人士有关的信息,如姓名、邮寄地址、电子邮件地址以及电话号码。Apple 将使用此类信息来满足你的要求,提供相关的产品或服务,或实现反欺诈目的。 在美国,出于提供商业信贷、管理预订或履行法律义务的目的,我们可能会要求用户提供由政府发放的身份证明,但仅限于为数不多的情形,例如设置无线帐户和激活设备。
再参考下他们的保护策略,他们承诺是会加密并且限制访问。
个人信息的保护
Apple 非常重视你的个人信息的安全。Apple 在线服务(如 Apple Store 在线商店和 iTunes Store)会使用传输层安全协议 (TLS) 等加密技术,在传输过程中保护你的个人信息。在 Apple 存储你的个人数据时,我们会使用具有有限访问权限的电脑系统,这些系统部署在通过物理安全措施加以保护的设施之中。iCloud 数据以加密形式存储,在我们使用第三方存储时也是如此。这份隐私声明是具有法律效应的,如果因为隐私声明中的措施没有做到位而引起持卡人损失,持卡人是有权提起诉讼的。
按照业界对持卡人数据的保护规范来看,这些验证数据会得到妥善保存,如果有存在潜在漏洞,都可能导致苹果公司无法承担的严重后果,这也是他们会关注持卡人数据安全的核心动力所在。
AppleID也是同样的道理,在绑定银行卡后,AppleID的密码等同于支付密码,任何支付请求都需要通过AppleID发起,并提供密码,之后交易才会经过授权。这与通过银行卡密码支付原理一致。
引申一个问题,银行卡密码保存在银行安全吗?对于这点,可以明确的说,是安全的,银行只会保存物理加密后的密码密文,核对密码是通过对密文的核对实现的——也就是说,没人会知道你的银行卡密码,即使是银行IT运维人员——除非持卡人自己泄露。在这里只能做个类比推断,AppleID的密码存储也是采用类似的策略。
综述:苹果公司的支付是安全可信的——前提是保护好自己AppleID的密码!
【赵勋的回答(0票)】:
可以理解为快捷支付,是银行对授信企业(下称“平台”)提供的一种方便其用户进行支付交易的一种用户认证方式,跟你在淘宝购物跳转到支付宝输支付密码是一个道理。
后台流程:
0、签约:用户需要预先平台绑定银行支付帐号信息,平台根据银行要求向用户索取对应账户信息,一般为用户的真实姓名、身份证号、银行账号/卡号(如果是信用卡还有有效期和CVV2)、银行预留手机号。绑定成功后,平台有权利代用户向银行发起交易请求;
1、消费:用户消费时,平台代用户填写网银交易信息,并向银行发起交易请求,(可以简单类比浏览器自动填表和提交软件),银行根据预留的签约信息支付给商户,完成支付环节;
为什么这么短?因为是快捷支付,目的就是(比网银)更快捷。当然现在有更快捷的诸如二维码支付、指纹、近场、扫码、声波、摇一摇、手势密码支付等,都是快捷支付在移动环境下的一种应用。
题主的副问题:是否意味着绑定后,苹果有权不经过银行卡持有人的许可(输入银行卡支付密码)擅自把银行卡持有人卡中的钱转走?
回答:不是。苹果有能力不经过银行卡持有人的许可把银行卡持有人卡中的钱转走,但不代表有权利。
【LiuYang的回答(0票)】:
Caesar Chan已经把具体过程讲述了。
补充一点就是,通过保存支付信息进行一键下单,就是Amazon的1-Click专利,Amazon授权给苹果使用。流程和在亚马逊购物是一样的。
商户与银联的对接应该和Visa/MasterCard基本一样。
【bodysome的回答(0票)】:
是,绑定之后就可以取走你的钱。
每次付费的时候你要填写只有自己知道的密码。这是古典认证,密码是只有你自己知道的知识,知道这个知识的就是你。
你按下密码的时候,一个契约就产生,你必须为契约而负责。
您可能对这些内容感兴趣:《》
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)第一次进app store,账户 设置时一定要填写付款卡号吗?_ipad吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:492,699贴子:
第一次进app store,账户 设置时一定要填写付款卡号吗?收藏
各位 第一次进app store,按要求检查,到填付款卡号那步时,我不想填,选了 无,其他都填写正确,但点下一步的时候却提示要输入付款卡卡号,大家都这样吗?PS: 我下的是app是免费的
马尔代夫、泰国、中国、马来西亚多国酒店全部订一晚送一晚,3天限时优惠
不要 你随便选个。不会叫你填号码的
我就看看不说话
我也遇到了同样的问题。。。请问楼主怎么处理的。。。
求问啊求问啊。。。显示必须要填写卡号,但是之前的IPHONE都是选择无就可以了,不知道怎么回事。。。
确实是随便选一个,不会让你填号码的。
随便选一个,不会让你填号码,选好稍等片刻就好了。
已经解决了,刚刚选择的无是必须让填卡号,要不然过不了,这次选的银行卡就过了。不知道是不是突发的bug...
为什么我添银行卡也不行呢
忘啦 写上也没事吧
我的也是这样的状况,楼主求解
选择银行卡不用填卡号
楼主我知道怎么整了
只要填写银行卡
寄送地址要分开写就可以通过
十五字 十五字 十五字 十五字 十五字
选择银行卡,像座银行的那个图标。好像是第二个还是第三个图标。不能选无,我就一个个试了,不填卡号
我选银行卡了,还是没说成功,怎么办,弄了一上午了
不然没法下载软件
不用,直接跳过就行了~
怎么解决 在线等
我也过不去 直接把卡号填了。。。还能删掉吗?
怎么弄,我选择银行卡还是不行
去电脑上面 下载 iTunes 苹果驱动
在那上面 登陆检查账号 填写银行卡 地址是三栏 全都填写随便填写就行然后就可以了
把中国换成台湾就行了
选择银行卡。
重启一下 我刚刚弄好
我也是怎么破!求教!
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或18357人阅读
本文会给大家详细介绍iOS内购,这是本人16年5月底的开发过程,希望对看完此篇文章的人有所帮助。
本文基于XcodeVersion 7.3 (7D175)版本,手机是iPhone 6,9.3系统。
部分地方直接摘自网络,基本上是我的逻辑,省时省心省力。
一. 创建测试App
首先你需要登录 App的ItunesConnection,你会看到如下界面
简单的介绍一下这几个选项
1.我的App主要用于管理自己的App应用,例如编辑资料,上架,下架等。
2.销售和趋势主要是来查看App在各个平台的下载量,收入等方面数据,里面有曲线图等图文结合的方式给我们参考。
3.付款和财务报告显示的是你的收入以及付款等相关信息。
4.iAd主要是跟广告有关,开发者可以登录到Workbench,通过iAd对应用的广告进行控制。
5.用户和职能用于生成相应账号,例如苹果沙河测试账号。
6.协议,税务和银行业务则是你银行相关账户的信息设置。
在这里我们选择第一个选项,我的App, 然后点击左上角的加号,新建一个用来测试用的App。
点新建 App,会出现新建窗口;
在这里有几个需要填写的地方,名称自己取,平台IOS,语言选择了简体中文,套装ID也就是你的Bundle Identifier,需要你在 申请BundleID,SKU可以理解为用户看一看到的唯一标示,会体现在你的app的App Store的链接中。
二.添加内购
App创建好之后,我们打开创建的App,在左上角选择功能,会看到左侧的App 内购买项目。我们点击右下角的加号,为App添加内购项目。
之后我们会看到类型的选项,如下图
官方的注释写的很清楚了,只在这里简单的说下前两种:
- 消耗型项目 就像你玩游戏需要买金币,买钻石等,只要花钱就可以无限次的购买
- 非消耗型项目 就像你在App Store购买App,买了一次之后就不用再买第二次,你拥有永久使用权。
在我们的app中,是充值会员,所以选择的是第一种,可以无限次购买。
这里有几个选项,需要填写商品名称,产品ID以及价格等级,简单说明一下
1. 商品名称根据你的消费道具的实际意义来说明,比如“100颗宝石”,“100金币”等。
2. 产品ID是比较重要的,由项目自定义,只要唯一即可,因为测试,我在这里随便填写的123,在实际应用中,一定要认真填写。
3. 价格等级的话“查看价格表”中有对应的说明,可以对照着表中每个国家的货币价格与等级来选择
接下来是语言选择,和上传快照如下图
点击添加语言,填写名称和描述,这里我们依然选择简体中文,如下
审核备注,根据实际情况填写,可以不填。而下面的屏幕快照,则是商品图片,以像素为单位,最低尺寸为321,390,尺寸需求如下图,上传即可。
到这里为止, 我们的内购项目则添加完成。接下来则是测试阶段了。
三.申请沙盒测试账号(用来测试购买项目)
这个账号,是利用苹果的沙盒测试环境来模拟AppStore的购买流程,你肯定不会想要用真实RMB去购买测试吧?
首先我们回到iTunes Connect中,在这里我们选择用户和职能。
然后在上面的第三个选项沙箱技术测试员中点击加号,添加测试员。
在信息填写页面只简单说两句。
所有信息都可以随意填写,不用管是否真实。
App Store地区选择,一定要选对,它对应的是你创建的App的地区, 你App是中国的话, 在这里我们依然选择中国。
此账号只能用来测试,不要在正式的appstore上使用
填写完毕,点击保存后,我们则生成一个测试账号,当然这个账号是可以随时删除和添加的。
之后终于到了写代码的时候了,点开你的Xcode创建你的项目!
大部分代码都可以在.m文件中实现。
#import "ViewController.h"
#import &StoreKit/StoreKit.h&
#import "SVProgressHUD.h"
@interface ViewController ()&SKPaymentTransactionObserver,SKProductsRequestDelegate&
@property (nonatomic,copy) NSString *currentProId;
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(100, 100, 100, 100);
button.backgroundColor = [UIColor greenColor];
[button setTitle:@"6元" forState:UIControlStateNormal];
[button addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchDown];
[self.view addSubview:button];
- (void)btnClick:(UIButton *)button
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
_currentProId = @"123";
if([SKPaymentQueue canMakePayments]){
[self requestProductData:product];
NSLog(@"不允许程序内付费");
- (void)requestProductData:(NSString *)type{
NSLog(@"-------------请求对应的产品信息----------------");
[SVProgressHUD showWithStatus:nil maskType:SVProgressHUDMaskTypeBlack];
NSArray *product = [[NSArray alloc] initWithObjects:type,nil];
NSSet *nsset = [NSSet setWithArray:product];
SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers:nsset];
request.delegate = self;
[request start];
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response{
NSLog(@"--------------收到产品反馈消息---------------------");
NSArray *product = response.products;
if([product count] == 0){
[SVProgressHUD dismiss];
NSLog(@"--------------没有商品------------------");
NSLog(@"productID:%@", response.invalidProductIdentifiers);
NSLog(@"产品付费数量:%lu",(unsigned long)[product count]);
SKProduct *p = nil;
for (SKProduct *pro in product) {
NSLog(@"%@", [pro description]);
NSLog(@"%@", [pro localizedTitle]);
NSLog(@"%@", [pro localizedDescription]);
NSLog(@"%@", [pro price]);
NSLog(@"%@", [pro productIdentifier]);
if([pro.productIdentifier isEqualToString:_currentProId]){
SKPayment *payment = [SKPayment paymentWithProduct:p];
NSLog(@"发送购买请求");
[[SKPaymentQueue defaultQueue] addPayment:payment];
- (void)request:(SKRequest *)request didFailWithError:(NSError *)error{
[SVProgressHUD showErrorWithStatus:@"支付失败"];
NSLog(@"------------------错误-----------------:%@", error);
- (void)requestDidFinish:(SKRequest *)request{
[SVProgressHUD dismiss];
NSLog(@"------------反馈信息结束-----------------");
#define SANDBOX @"https://sandbox./verifyReceipt"
#define AppStore @"https://buy./verifyReceipt"
-(void)verifyPurchaseWithPaymentTransaction{
NSURL *receiptUrl=[[NSBundle mainBundle] appStoreReceiptURL];
NSData *receiptData=[NSData dataWithContentsOfURL:receiptUrl];
NSString *receiptString=[receiptData base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed];
NSString *bodyString = [NSString stringWithFormat:@"{\"receipt-data\" : \"%@\"}", receiptString];
NSData *bodyData = [bodyString dataUsingEncoding:NSUTF8StringEncoding];
NSURL *url=[NSURL URLWithString:SANDBOX];
NSMutableURLRequest *requestM=[NSMutableURLRequest requestWithURL:url];
requestM.HTTPBody=bodyD
requestM.HTTPMethod=@"POST";
NSError *error=nil;
NSData *responseData=[NSURLConnection sendSynchronousRequest:requestM returningResponse:nil error:&error];
if (error) {
NSLog(@"验证购买过程中发生错误,错误信息:%@",error.localizedDescription);
NSDictionary *dic=[NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingAllowFragments error:nil];
NSLog(@"%@",dic);
if([dic[@"status"] intValue]==0){
NSLog(@"购买成功!");
NSDictionary *dicReceipt= dic[@"receipt"];
NSDictionary *dicInApp=[dicReceipt[@"in_app"] firstObject];
NSString *productIdentifier= dicInApp[@"product_id"];
NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
if ([productIdentifier isEqualToString:@"123"]) {
int purchasedCount=[defaults integerForKey:productIdentifier];
[[NSUserDefaults standardUserDefaults] setInteger:(purchasedCount+1) forKey:productIdentifier];
[defaults setBool:YES forKey:productIdentifier];
NSLog(@"购买失败,未通过验证!");
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transaction{
for(SKPaymentTransaction *tran in transaction){
switch (tran.transactionState) {
case SKPaymentTransactionStatePurchased:{
NSLog(@"交易完成");
[self verifyPurchaseWithPaymentTransaction];
[[SKPaymentQueue defaultQueue] finishTransaction:tran];
case SKPaymentTransactionStatePurchasing:
NSLog(@"商品添加进列表");
case SKPaymentTransactionStateRestored:{
NSLog(@"已经购买过商品");
[[SKPaymentQueue defaultQueue] finishTransaction:tran];
case SKPaymentTransactionStateFailed:{
NSLog(@"交易失败");
[[SKPaymentQueue defaultQueue] finishTransaction:tran];
[SVProgressHUD showErrorWithStatus:@"购买失败"];
- (void)completeTransaction:(SKPaymentTransaction *)transaction{
NSLog(@"交易结束");
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
- (void)dealloc{
[[SKPaymentQueue defaultQueue] removeTransactionObserver:self];
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
在这里需要注意几点,
1. 代码中的_currentProId所填写的是你的购买项目的的ID,这个和第二步创建的内购的productID要一致;本例中是 123。
2. 在监听购买结果后,一定要调用[[SKPaymentQueue defaultQueue] finishTransaction:tran];来允许你从支付队列中移除交易。
3. 沙盒环境测试appStore内购流程的时候,请使用没越狱的设备。
4. 请务必使用真机来测试,一切以真机为准。
5. 项目的Bundle identifier需要与您申请AppID时填写的bundleID一致,不然会无法请求到商品信息。
6. 真机测试的时候,一定要退出原来的账号,才能用沙盒测试账号
7. 二次验证,请注意区分宏, 测试用沙盒验证,App Store审核的时候也使用的是沙盒购买,所以验证购买凭证的时候需要判断返回Status Code决定是否去沙盒进行二次验证,为了线上用户的使用,验证的顺序肯定是先验证正式环境,此时若返回值为21007,就需要去沙盒二次验证,因为此购买的是在沙盒进行的。
附:苹果支付错误目录
Status Code
Description
The App Store could not read the JSON object you provided.
The data in the receipt-data property was malformed or missing.
The receipt could not be authenticated.
The shared secret you provided does not match the shared secret on file for your account.Only returned for iOS 6 style transaction receipts for auto-renewable subscriptions.
The receipt server is not currently available.
This receipt is valid but the subscription has expired. When this status code is returned to your server, the receipt data is also decoded and returned as part of the response.Only returned for iOS 6 style transaction receipts for auto-renewable subscriptions.
This receipt is from the test environment, but it was sent to the production environment for verification. Send it to the test environment instead.
This receipt is from the production environment, but it was sent to the test environment for verification. Send it to the production environment instead.
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:23641次
排名:千里之外
原创:13篇
(1)(3)(1)(1)(1)(2)(3)(1)(1)(1)(1)

我要回帖

更多关于 陆风逍遥 gla 的文章

 

随机推荐