iOS开发-Apple Pay-苹果支付

337517598 8年前
   <p>Apple Pay,是苹果公司在2014年苹果秋季新品发布会上发布的一种基于NFC(近场通讯)的手机支付功能,2016年2月18日凌晨5点,Apple Pay业务在中国上线。</p>    <p>它的支付方式是通过 Touch ID/Passcode 验证方式,用户可使用事先已经储存在IPhone 6 ,6p或者更新设备上的银行卡支付证书来授权支付,当然最新的5e,同样支持Apple Pay支付。</p>    <p>也就是说你的苹果设备要在IOS8.0及以上版本,并在wallet应用中,添加银行卡信息,从而使用Apple Pay。</p>    <p>它所支持的银行可以到官方查看,这里给出 <a href="/misc/goto?guid=4959677157908185741" rel="nofollow,noindex">官方链接</a></p>    <p>手机怎么添加银行卡,这里不过多介绍,只需要按照手机提示即可。</p>    <h2>和支付宝和微信等第三方支付的区别?</h2>    <p>首先Apple Pay支付必须要Iphone手机,并且不低于iphone6。</p>    <p>但是Apple Pay对于支付无需联网也可以使用,使用的是 NFC 近场通讯。</p>    <p>对于支付宝和微信,他们的功能可以说更多,不光支付,还可以进行理财、转账等一系列的玩法,这是因为我们已经将钱转给第三方,而Apple Pay的钱从始至终都在你自己的银行卡里,它所储蓄的只是你银行卡的电子信息,当你进行支付的时候,相当于你与银行直接对接,不会讲钱在经过别的第三方,从而安全性,是支付宝,微信等第三方不可比的。</p>    <p>它的付款流程如下图:</p>    <p><img src="https://simg.open-open.com/show/fa7fe44d0397354777797ce729937550.png"></p>    <h2>集成</h2>    <p>Apple Pay的集成可以说是相当的简单的,只不过在这里需要我们用到证书,苹果也给出了Apple Pay的集成教程, <a href="/misc/goto?guid=4958986868587005634" rel="nofollow,noindex">地址在这里</a> .</p>    <p>这里怎么添加证书我只简单的说一下,大家应该都很熟了</p>    <p>1.登录开发者账号,添加 App ID (记得勾选下面的Apple Pay)</p>    <p>2.添加 Merchant IDs</p>    <p>3.将创建的App ID里面的Apple Pay设置自己的Merchant IDs</p>    <p>4.检查App ID里面的Apple Pay的两个选项是否都为绿色</p>    <p>5.创建 Merchant 证书,绑定App ID并安装</p>    <p>Apple Pay原理图:</p>    <p><img src="https://simg.open-open.com/show/257c186cf8864ef4a17977903684b2cd.png"></p>    <h3>设置Xcode</h3>    <p>在Xcode中,将 Capabilities 中的Apple Pay开启</p>    <p><img src="https://simg.open-open.com/show/15f6e5ffaa0a8113529dea5eb600bdfd.png"></p>    <p>中间会生成你设置的App ID,将其勾选。</p>    <h3>判断当前设备是否可以支付?</h3>    <p>首先我们要导入头文件 import PassKit .</p>    <p>添加判断代码</p>    <pre>  <code class="language-swift">//判断设备是否支持Apple Pay          if !PKPaymentAuthorizationViewController.canMakePayments()          {              print("不支持Apple Pay")          // 判断是否添加了银行卡          }else if !PKPaymentAuthorizationViewController.canMakePaymentsUsingNetworks([PKPaymentNetworkVisa, PKPaymentNetworkChinaUnionPay])          {                                      }else          {                        }  </code></pre>    <h3>创建支付按钮</h3>    <p>但我们判断了设备时候支持支付和是否添加银行卡后,我们需要再次创建按钮,这里用到的不是 UIButton 而是 PKPaymentButton 代码如下</p>    <pre>  <code class="language-swift">//判断设备是否支持Apple Pay         if !PKPaymentAuthorizationViewController.canMakePayments()         {             print("不支持Apple Pay")         // 判断是否添加了银行卡         }else if !PKPaymentAuthorizationViewController.canMakePaymentsUsingNetworks([PKPaymentNetworkVisa, PKPaymentNetworkChinaUnionPay])         {              //创建跳转按钮             let btn = PKPaymentButton.init(type: PKPaymentButtonType.SetUp, style: PKPaymentButtonStyle.WhiteOutline)             btn.addTarget(self, action: #selector(ViewController.jumpBankCard), forControlEvents: UIControlEvents.TouchUpInside)             btn.frame = CGRect(x: 100, y: 100, width: 100, height: 20)             view.addSubview(btn)                      }else         {             //创建支付按钮             let btn = PKPaymentButton.init(type: PKPaymentButtonType.Buy, style: PKPaymentButtonStyle.Black)             btn.addTarget(self, action: #selector(ViewController.buyShop), forControlEvents: UIControlEvents.TouchUpInside)             btn.frame = CGRect(x: 100, y: 100, width: 100, height: 20)             view.addSubview(btn)         }  </code></pre>    <p>分别创建了两个按钮, 一个在没用添加银行卡的情况下, 另一个是全部通过, 支付按钮</p>    <p>这里我们在 跳转银行卡方法 代码如下</p>    <pre>  <code class="language-swift">//跳转添加银行卡页面      func jumpBankCard(){          PKPassLibrary().openPaymentSetup()          print("跳转设置界面")      }  </code></pre>    <h3>开始支付请求</h3>    <p>支付请求按钮 ,里面要特别说明一下,在方法里面,虽然我们可以直接创建支付请求 let request = PKPaymentRequest() ,并用 PKPaymentAuthorizationViewController 跳转,但是这样会直接崩溃,因为你的支付请求里面没有添加信息</p>    <p>直接看代码:</p>    <pre>  <code class="language-swift">//购买      func buyShop(){           print("开始购买")           //1.创建支付请求          let request = PKPaymentRequest()          //2.配置商家ID          request.merchantIdentifier = "yimouelng.com";          //3.配置货币代码和国家代码          request.countryCode = "CN";          request.currencyCode = "CNY";          //4.配置请求支持的支付网络          request.supportedNetworks = [PKPaymentNetworkVisa,PKPaymentNetworkChinaUnionPay];          //5.配置处理方式          request.merchantCapabilities = PKMerchantCapability.Capability3DS          //6.配置购买的商品列表 注意支付列表最后一个代表总和 注意名称和价钱          let num = NSDecimalNumber.init(string:"988")            let item = PKPaymentSummaryItem.init(label: "商品", amount: num)          request.paymentSummaryItems  = [item]                              //附加选项(选填) --------          request.requiredBillingAddressFields = PKAddressField.All//添加收货地址                    request.requiredShippingAddressFields = PKAddressField.All//运输地址                    //添加快递          let price = NSDecimalNumber.init(string:"988")          let method = PKShippingMethod.init(label: "顺丰", amount: price)          method.identifier = "sf"          method.detail = "货到付款"//备注          request.shippingMethods = [method]                    request.applicationData = "id = 1" .dataUsingEncoding(NSUTF8StringEncoding)//添加附加数据                    //7.验证用户的支付请求并跳转支付页面          let  auth = PKPaymentAuthorizationViewController.init(paymentRequest: request)          self.presentViewController(auth, animated: true, completion: nil)      }  </code></pre>    <p>这里附加选项里面的可填可不填,但是上面的内容必填</p>    <p>这里需要注意的是 第6步是配置购买的商品列表 注意支付列表最后一个代表总和 注意名称和价钱</p>    <p>比如你添加了三个商品,前两个每个都是10元, 而最后一个名字最好使用商家名字,加个则是前两个的总和</p>    <p>代码到这里就结束了,没有什么难度,只有几个小点需要注意一下,也都以注明。</p>    <p><img src="https://simg.open-open.com/show/63db82db37bcf4ba7c6b61f693b7cfe8.png"></p>    <h2>总结</h2>    <p>代码看一遍就能记住,不需要硬背,如果有错误请及时指出。</p>    <p>Demo用swift写的,后又写了一个OC版的,都会在这里放出,点击下载。</p>    <p>下载: <a href="/misc/goto?guid=4959677158035251961" rel="nofollow,noindex">swiftDemo</a> 、 <a href="/misc/goto?guid=4959677158133676113" rel="nofollow,noindex">OCDemo</a></p>    <p> </p>    <p>来自:http://yimouleng.com/2016/05/27/ios-ApplePay/</p>    <p> </p>    <p><span style="background:rgb(189, 8, 28) url("data:image/svg+xml; border-radius:2px; border:medium none; color:rgb(255, 255, 255); cursor:pointer; display:none; font:bold 11px/20px "Helvetica Neue",Helvetica,sans-serif; left:30px; opacity:0.85; padding:0px 4px 0px 0px; position:absolute; text-align:center; text-indent:20px; top:590px; width:auto; z-index:8675309">Save</span></p>