使用PHP生成二維碼名片的格式 - vcard 方便微信掃描添加至通訊錄


這次需要用到微信通過掃描二維碼,來保存名片至通訊錄,需要實現的效果如下:

首先還是要下載PHPQRCode解壓后台把phpqrcode.php存放至ThinkPHP/Extend/Vendor/文件夾中

PHP方法如下

//生成分享二維碼圖片
//$name   			姓名
//$username   		昵稱
//$company   		公司名
//$phone   			手機號
//$tell   			公司電話
//$position   		職位
//$email   			郵箱
//$uid   			id名
function get_vcard($name,$username,$company,$phone,$tell,$position,$email,$uid){
    Vendor('phpqrcode.phpqrcode');
    //生成二維碼圖片
    $object = new \QRcode();
	$url='BEGIN:VCARD
	VERSION:3.0
	FN:'.$name.'
	NICKNAME:'.$username.'
	ORG:'$company'
	TITLE:'.$position.'
	TEL;TYPE=work:'.$tell.'
	TEL:'.$phone.'
	EMAIL:'.$email.'
	END:VCARD';
    $level='M';
    $size=4;
    $errorCorrectionLevel =intval($level) ;//容錯級別
    $matrixPointSize = intval($size);//生成圖片大小
    //$object->png($url,"vcardimg/b.png");
    $object->png($url, 'vcardimg/vcardcode_'.$uid.'.png', $errorCorrectionLevel, $matrixPointSize,2);    //vcardimg為保存目錄
}

通過上面的方法我們就可以生成二維碼保存至本地vcardimg文件夾中了

 

一個簡單的vcard名片格式例子參考如下:

BEGIN:VCARD
VERSION:3.0
FN:智昕
TEL;CELL;VOICE:15201280000
TEL;WORK;VOICE:010-62100000
TEL;WORK;FAX:010-62100001
EMAIL;PREF;INTERNET:lzw#lzw.me
URL:http://lzw.me
orG:智昕網絡
ROLE:PHP開發工程師
TITLE:CTO
ADR;WORK;POSTAL:雲南省昆明市官渡區;650000
REV:2017-07-20T08:30:02Z
END:VCARD



3.1 vcard格式簡介

 vCard(或稱做Versitcard)最早是由Versit聯盟於1995年提出的,當時聯盟成員包括蘋果公司,AT&T科技(后來的朗訊),IBM及西門子。在1996年十二月,格式的擁有權移至因特網郵件聯盟(IMC),此聯盟是由一些關注因特網電子郵件的公司所組成。

vCard標准的2.1版被電子郵件客戶端廣泛支持。3.0版是一個包含在RFC 2425和RFC 2426中的IETF標准跟蹤提案。vCard的常用文件擴展名是.vcf。

不同的程序對vCard標准實現亦不同。Mac OS X中的Address Book允許把所有聯系人導出到一個vcf文件,而Microsoft Outlook只能每人一個文件。Linux中KDE的Kontact允許每個文件導入或導出一人或多人。

3.2 vcard標准通信薄基本格式

3.2.1 VCard 數據格式的標識符 - VCARD

  預定義的值類型:uri, date, date-time, float
  新增加的值類型:binary, phone-number, utc-offset and vcard value
  預定義的類型:SOURCE, NAME, PROFILE, BEGIN, END.
  新增加的類型:FN, N, NICKNAME, PHOTO, BDAY, ADR, LABEL, TEL, EMAIL,
  MAILER, TZ, GEO, TITLE, ROLE, LOGO, AGENT, orG, CATEGORIES, NOTE,
  PRODID, REV, SORT-STRING, SOUND, URL, UID, VERSION, CLASS, KEY
  預定義的參數:ENCODING, VALUE, CHARSET, LANGUAGE, CONTEXT.
  新增加的參數:TYPE

3.2.2 vCard數據格式行: 類型 [;參數]:值 

  ADR;HOME;POSTAL;PARCEL:;;街道地址;深圳;廣東;433330;中國
  ADR:是一個類型,表示是一條地址信息
  “;”號是分隔符合
  HOME;POSTAL;PARCEL表示參數,表示ADR的用途或者是類別
  :;;街道地址;深圳;廣東;433330;中國 表示是一個ADR值,地址值
 

3.2.3 預定義類型的用法  

3.2.3.1 BEGIN 和 END 類型

  Vcard內容必須以BEGIN:VCARD開頭,以END:VCARD結尾vcard的類型標志特征詳解

3.2.3.2 標識類型

  FN 類型定義

  目的:vcard對象的名稱,一個vcard對象必須包含FN類型。
  例子:FN:Mr. John Q. Public\, Esq.

  N類型定義

  目的:FN表示一個vcard對象的名稱,N表示這個對象名稱的組成部分
  例子:N:Public;John;Quinlan;Mr.;Esq.
  N:Stevenson;John;Philip,Paul;Dr.;Jr.,M.D.,A.C.P.
  各個組成部分可以用分號分號,每個組成部分可以用逗號。

  NICKNAME類型定義

  目的:表示別名
  例子:NICKNAME:Robbie
  NICKNAME:Jim,Jimmie

  PHOTO類型定義

  目的:vcard對象的圖像信息
  例子:PHOTO;VALUE=uri:圖片地址

PHOTO;ENCODING=b;TYPE=JPEG:MIICajCCAdOgAwIBAgICBEUwDQYJKoZIhvcN
AQEEBQAwdzELMAkGA1UEBhMCVVMxLDAqBgNVBAoTI05ldHNjYXBlIENvbW11bm ljYXRpb25zIENvcnBvcmF0aW9uMRwwGgYDVQQLExNJbmZvcm1hdGlvbiBTeXN0
<...remainder of "B" encoded binary data...>
 

  如果使用內聯的二進制數據表示圖片信息,那么;ENCODING=b 

  BDAY類型定義

  目的:表示出生日期
  例子:BDAY:1996-04-15
  BDAY:1953-10-15T23:10:00Z
  BDAY:1987-09-27T08:30:00-06:00
 

3.2.3.3 聯系方式
 

  ADR 類型定義

  目的:是一個組合,用來表示一個地址信息,值類型是一個用分號分開的文本值
  例子:ADR;TYPE=dom,home,postal,parcel:;;123 Main Street;Any Town;CA;91921-1234;A
  ADR;HOME;POSTAL;PARCEL:;;街道地址;深圳;廣東;444444;中國
  組合由一下部分順序的組成:

  the post office box;
  the extended address;
  the street address;
  the locality (e.g., city);
  the region (e.g., state or province);
  the postal code;
  the country name

  七個部分組成,如果,其他的一個部分沒有,必須用分號分開

  type 參數的說明
  "dom" 國內地址
  "intl" 國際地址
  "parcel"包裹遞送地址
  "home" 居住地址;
  "work"工作地址;
  "pref" 有多個地址的時候,優先的地址
  缺省的"TYPE=intl,postal,parcel,work",可以替換

  LABEL類型定義

  目的:是一格式化的文本值,表示一個地址
  例子:LABEL;TYPE=dom,home,postal,parcel:Mr.John Q. Public\, Esq.\n
  Mail Drop: TNE QB\n123 Main Street\nAny Town\, CA 91921-1234
  \nU.S.A.

  type 參數的說明
  "dom" 國內地址
  "intl" 國際地址
  "parcel"包裹遞送地址
  "home" 居住地址;
  "work"工作地址;
  "pref" 有多個地址的時候,優先的地址
  缺省的"TYPE=intl,postal,parcel,work",可以替換

  和ADR的不同是 ADR的值是用分號分開的數據,LABEL就是一個格式化的文本。
電話通信地址類型

  TEL類型定義

  目的:指定一個電話號碼
  例子:TEL;TYPE=work,voice,pref,msg:+1-213-555-1234
  說明:值是一個規范的全球唯一的電話號碼
  TYPE參數的值有:

  "home"表示家庭電話
  "msg" 表示這個號碼支持語音
  "work" 工作電話
  "pref" 表示多個電話中最喜歡使用的電話
  "voice" 聲音電話號碼
  "fax"傳真號碼
  "cell" 表示手機電話
  "video" 視頻電話
  "pager" 調度電話,估計是總機的電話
  "bbs" 公開的廣播系統的電話
  "modem" 調制解調器電話
  "car"汽車電話
  "isdn" ISDN連接電話號碼
  "pcs" 個人通信服務電話
 

  缺省是 "voice".
  TYPE參數的用法是TYPE=work;TYPE=voice或者"TYPE=work,voice",缺省值可以被重置
  "TYPE=work,home,voice,fax".

  EMAIL類型定義

  目的:指定一個電子郵件
  例子:EMAIL;TYPE=internet:郵箱地址
  EMAIL;TYPE=x400:郵箱地址
  EMAIL;TYPE=internet,pref:郵箱地址
 

  TYPE參數的使用

  "internet" 表示一個internet 類型地址
  "x400" 表示是一個 X.400 地址
  "pref"最喜歡使用的郵件電子

  缺省是"internet".

MAILER 類型定義

  目的:指定一個電子郵件發送者
  例子:MAILER:PigeonMail 2.1
 

3.2.3.4 地理類型

  TZ類型定義

  目的:時區信息
  例子:TZ:-05:00
  TZ;VALUE=text:-05:00; EST; Raleigh/North America
  缺省是一個utc-offset值.
 

GEO類型定義

  目的:地理位置信息
  例子GEO:37.386013;-122.082932
  CEO 經度;緯度
 

3.2.3.5 組織類型

  TITLE類型定義

  目的:工作位置,工作職能(job title)
  例子TITLE:Director\, Research and Development

  ROLE 類型定義

  目的:公司的職業(occupation)
  例子ROLE:Programmer
 

  LOGO類型定義

  目的:公司logo,是一個圖像信息
  例子LOGO;VALUE=uri:圖片地址

LOGO;ENCODING=b;TYPE=JPEG:MIICajCCAdOgAwIBAgICBEUwDQYJKoZIhvcN AQEEBQAwdzELMAkGA1UEBhMCVVMxLDAqBgNVBAoTI05ldHNjYXBlIENvbW11bm
ljYXRpb25zIENvcnBvcmF0aW9uMRwwGgYDVQQLExNJbmZvcm1hdGlvbiBTeXN0
<...the remainder of "B" encoded binary data...>

  說明:TYPE知道圖像的格式,ENCODING=b表示是二進制的數據流
  URI表示是一個外部圖像對象

  AGENT類型定義

  目的:指定另外一個人替換他的個人行為
  例子:AGENT;VALUE=uri: CID:JQPUBLIC.part3.960129T083020.郵箱地址
  AGENT:BEGIN:VCARD\nFN:Susan Thomas\nTEL:+1-919-555-
  1234\nEMAIL\;INTERNET:主機地址\nEND:VCARD\n
  說明:缺省是一個Vcard對象,當時也可是一個URI指定的外部Vcard對象

  ORG類型定義

  目的:表示一個組織的名稱
  例子ORG:ABC\, Inc.;North American Division;Marketing
 

3.2.3.6 解釋類型

  CATEGORIES類型定義
  目的:vcard應用的分類信息
  例子:CATEGORIES:TRAVEL AGENT
  CATEGORIES:INTERNET,IETF,INDUSTRY,INFORMATION TECHNOLOGY
 

  NOTE 類型定義

  目的:對vcard的注釋和說明
  例子:NOTE:This fax number is operational 0800 to 1715
  EST\, Mon-Fri.

  PRODID類型定義

  目的:指定創建Vcard對象的產品的ID
  例子:PRODID:-//ONLINE DIRECTORY//NONSGML Version 1//EN
 

  REV類型定義

  目的:指定當前Vcard的修改信息
  例子:REV:1995-10-31T22:27:10Z
  REV:1997-11-15
 

  SORT-STRING類型定義

  目的:指定家庭名稱或者其他名稱對FN和N類型排序
  例子:

        FN:Rene van der Harten
  N:van der Harten;Rene;J.;Sir;R.D.O.N.
  SORT-STRING:Harten
  FN:Robert Pau Shou Chang
  N:Pau;Shou Chang;Robert
  SORT-STRING:Pau
  FN:Osamu Koura
  N:Koura;Osamu
  SORT-STRING:Koura
  FN:Oscar del Pozo
  N:del Pozo Triscon;Oscar
  SORT-STRING:Pozo
  FN:Chistine d'Aboville
  N:d'Aboville;Christine
  SORT-STRING:Aboville

  SOUND類型定義

  目的:指定Vcard的數字聲音信息,缺省是指定vcard的name類型的發音信息。
  例子: SOUND;TYPE=BASIC;VALUE=uri:CID:JOHNQPUBLIC.part8.
  19960229T080000.地址
  SOUND;TYPE=BASIC;ENCODING=b:MIICajCCAdOgAwIBAgICBEUwDQYJKoZIhvcN AQEEBQAwdzELMAkGA1UEBhMCVVMxLDAqBgNVBAoTI05ldHNjYXBlIENvbW11bm ljYXRpb25zIENvcnBvcmF0aW9uMRwwGgYDVQQLExNJbmZvcm1hdGlvbiBTeXN0 <...the remainder of "B" encoded binary data...>

  可以用URI指定一個外部聲音二進制流
  可以是內置的聲音二進制流,ENCODING=b
 

  UID類型定義

  目的:指定一個全球唯一的個人或資源標識。
  例子:UID:19950401-080045-40000F192713-0052
  URL類型定義
  目的:指定Vcard 參考的路徑。
  例子:URL: 網址 

  VERSION類型定義

  目的:指定Vcard使用的vcard規范的版本。
  例子: VERSION:3.0 

3.2.3.7 Security 類型

  CLASS類型定義

  目的:指定訪問Vcard對象的訪問分級。
  例子: CLASS:PUBLIC
  CLASS:PRIVATE
  CLASS:CONFIDENTIAL
  說明:安全分級需要參考目錄服務的訪問分級 

  KEY 類型定義

  目的:指定Vcard的公共鑰匙值(加密解密是使用)或者是授權認證。
  例子:

KEY;ENCODING=b:MIICajCCAdOgAwIBAgICBEUwDQYJKoZIhvcNAQEEBQA
  wdzELMAkGA1UEBhMCVVMxLDAqBgNVBAoTI05ldHNjYXBlIENbW11bmljYX
  Rpb25zIENvcnBvcmF0aW9uMRwwGgYDVQQLExNJbmZvcm1hdGlvbiBTeXN0
  ZW1zMRwwGgYDVQQDExNyb290Y2EubmV0c2NhcGUuY29tMB4XDTk3MDYwNj
  E5NDc1OVoXDTk3MTIwMzE5NDc1OVowgYkxCzAJBgNVBAYTAlVTMSYwJAYD
  VQQKEx1OZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBDb3JwLjEYMBYGA1UEAx
  MPVGltb3RoeSBBIEhvd2VzMSEwHwYJKoZIhvcNAQkBFhJob3dlc0BuZXRz
  Y2FwZS5jb20xFTATBgoJkiaJk/IsZAEBEwVob3dlczBcMA0GCSqGSIb3DQ
  EBAQUAA0sAMEgCQQC0JZf6wkg8pLMXHHCUvMfL5H6zjSk4vTTXZpYyrdN2
  dXcoX49LKiOmgeJSzoiFKHtLOIboyludF90CgqcxtwKnAgMBAAGjNjA0MB
  EGCWCGSAGG+EIBAQQEAwIAoDAfBgNVHSMEGDAWgBT84FToB/GV3jr3mcau
  +hUMbsQukjANBgkqhkiG9w0BAQQFAAOBgQBexv7o7mi3PLXadkmNP9LcIP
  mx93HGp0Kgyx1jIVMyNgsemeAwBM+MSlhMfcpbTrONwNjZYW8vJDSoi//y
  rZlVt9bJbs7MNYZVsyF1unsqaln4/vy6Uawfg8VUMk1U7jt8LYpo4YULU7
  UZHPYVUaSgVttImOHZIKi4hlPXBOhcUQ== 

3.2.3.8 擴展類型 

可以定義自己的類型,自己定義的類型需要以“x-”開頭
比如例子中的信息:

  X-QQ:000000
  X-ICQ:icq
  X-WAB-GENDER:2


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM