Month: October 2012

[問題] 如何讓連結點擊無效

使用 javascript: void(0)

<a href="javascript: void(0)">點我無效</a>
Tags :

[問題] 讀取 assets 內的檔案發生 IOException

原因:檔案超過 1MB 大小限制

解決方法:

1. 將檔案壓縮

可參考 [問題] Android 如何存取 Raws 內的 zip 壓縮檔

2. 將檔案分隔成小於 1MB 的檔案

> split -b 1048576 inputFileNameWithExt outputFIleName
Tags :

[問題] Android 如何存取 Raws 內的 zip 壓縮檔

一個 2MB 的 sqlite 檔案,壓縮後大小可減低至 70KB。

所以如果你的 APP 內有用到大量的資料庫,在發佈前先將檔案壓縮可以讓你的 apk 檔小很多。

並且早期版本的 android,有最大檔案 1MB 的限制,如果超過會造成 IOException

套用 CodeJava 所提供的 UnzipUtility.java檔案說明

修改UnzipUtility.java,因為原始檔的 input 部份是透過 讀取 zipfilepath,但是在 android 內是透過 openRawResource()

public void unzip(String zipFilePath, String destDirectory) throws IOException {
   ZipInputStream zipIn = new ZipInputStream(new FileInputStream(zipFilePath));
   unzip(zipIn, destDirectory);
}
public void unzip(ZipInputStream zipIn, String destDirectory) throws IOException {
   File destDir = new File(destDirectory);
   if (!destDir.exists()) {
      destDir.mkdir();
   }
   ...
}

使用方法

private void unzipRawResource() throws Exception {
   ZipInputStream zin = new ZipInputStream(
              myContext.getResources().openRawResource(
              yourPackageName.R.raw.yourFileName));
   UnzipUtility uzu = new UnzipUtility();
   uzu.unzip(zin, yourDestinationDirectory); // 如:"/data/data/yourPackageName/databases/"
}
Tags : ,

[問題] objective-c 如何判斷 String 包含某 String

NSString *string = @"Hello World";
 
if ([string rangeOfString:@"World"].location != NSNotFound) {
   NSLog(@"string contains World");
}
// 不區分大小寫
if ([myString rangeOfString:@"world" options:NSCaseInsensitiveSearch] != NSNotFound) {
   NSLog(@"string contains World");
}
Tags : ,

[教學] 如何使用 PayPal 作為你網站的結賬工具

PayPal SDK

下載

至 https://www.x.com/developers/paypal/documentation-tools/paypal-sdk-index 下載 PayPal SDK

PayPal 一共提供三種版本

  • dotnet
  • php
  • java (以下文章內容均以 java 版本為主)

Build

Build Merchant 這個 library 產生出 merchant-java-sdk_1.1.93.jar

其他的 lbirary 可以不需要

Sample Web

在 samples/merchant-sample 內可以找到 PayPal 提供的 sample, 透過 sample 可以操作基本的 PayPal API.

註冊開發者賬號

註冊

註冊一個 Paypal Devloper 帳號作為 Sandbox 測試用

測試帳號

新增2組測試帳號 (Test Accounts)

  • Buyer – 作為購買商品的測試帳號
  • Seller – 作為開發用的測試帳號

獲取 API Credentials

申請完 Seller Test Account 後,進入 [API and Payment Card Credentials] 項目可以看到

這些資訊將會填入 sdk_config.properties 內

交易流程

Step1. SetExpressCheckout

(情境)走到 PayPal 的櫃台跟櫃台人員說我等一下要開始結賬了

提交 SetExpressCheckout Request 至 PayPal。

  • https://api-3t.sandbox.paypal.com/2.0

Step2. TOKEN

(情境)櫃台人員收到你要開始結賬的通知,給你一個號碼牌讓你等下跟裡面的行員交易時使用

獲得 Express Checkout Token

PayPal 會將 Token 回傳至你所提供的 RETURNURL

TIMESTAMP=2007%2d04%2d05T23%3a23%3a07Z
&CORRELATIONID=63cdac0b67b50
&ACK=Success
&VERSION=2%2e300000
&BUILD=1%2e0006
&TOKEN=EC%2d1NK66318YB717835M
  • TOKEN = EC-21NK66318YB717835M

「註」使用的時候要將 %2d 轉換成 –

Step3. Redirect

(情境)你拿著剛剛發給你的號碼牌,去找裡面的行員

將此 token 回傳至 PayPal 開始顧客做登入 PayPal 的動作

  • https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=BC-6BM72991BF458753N

Step4. PayerID

(情境)行員會提供你所要結賬的客戶代號

獲得 PayerID,PayPal 會將 PayerID 回傳至你所提供的 RETURNURL

  • PayerID=7AKUSARZ7SAT8

Step5. 客戶資料

(情境)如果有需要的話,你可以使用這個客戶代號去跟行員要求客戶的詳細資料

提交 GetExpressCheckoutDetails 可以得到一些相關的客戶資訊 (這一個步驟是 optional)

TIMESTAMP=2007%2d04%2d05T23%3a44%3a11Z
&CORRELATIONID=6b174e9bac3b3
&ACK=Success
&VERSION=2%2e300000
&BUILD=1%2e0006
&TOKEN=EC%2d1NK66318YB717835M
&EMAIL=CustomerEmailAccount
&PAYERID=7AKUSARZ7SAT8
&PAYERSTATUS=verified
&FIRSTNAME=...
&LASTNAME=...
&COUNTRYCODE=US
&BUSINESS=...
&SHIPTONAME=...
&SHIPTOSTREET=...
&SHIPTOCITY=...
&SHIPTOSTATE=CA
&SHIPTOCOUNTRYCODE=US
&SHIPTOCOUNTRYNAME=United%20States
&SHIPTOZIP=94666
&ADDRESSID=...
&ADDRESSSTATUS=Confirmed

Step6. 開始結賬

(情境)有客戶的代號後,就可以開始進行結賬了,你的客戶可以選擇一次性購買商品,或者是訂閱報章的週期性付款方式

PayPal 提供兩種結賬方式

DoExpressCheckoutPayment,一次性的結賬

CreateRecurringPaymentsProfile,訂閱,週期性的付款(subscription)

Step7. 結賬結果

(情境)行員會告知你這次交易的結果是成功或是失敗

TIMESTAMP=2007%2d04%2d05T23%3a30%3a16Z
&CORRELATIONID=333fb808bb23
&ACK=Success
&VERSION=2%2e300000
&BUILD=1%2e0006
&TOKEN=EC%2d1NK66318YB717835M
&TRANSACTIONID=043144440L487742J
&TRANSACTIONTYPE=expresscheckout
&PAYMENTTYPE=instant
&ORDERTIME=2007%2d04%2d05T23%3a30%3a14Z
&AMT=19%2e95
&CURRENCYCODE=USD
&TAXAMT=0%2e00
&PAYMENTSTATUS=Pending
&PENDINGREASON=authorization
&REASONCODE=None

相關網頁

PayPal Developer – https://developer.paypal.com

PayPal SDK – https://www.x.com/developers/paypal/documentation-tools/paypal-sdk-index

PayPal Documention & Tools – https://www.x.com/developers/paypal/documentation-tools

PayPal Sandbox Test site – https://www.sandbox.paypal.com/webapps/mpp/home

PayPal Sandbox User Guide – https://www.paypalobjects.com/en_US/ebook/PP_Sandbox_UserGuide

PayPal Sandbox Getting Started Guide – https://www.x.com/developers/paypal/documentation-tools/quick-start-guides/paypal-sandbox-getting-started-guide

Tags :