1. 程式人生 > >支付寶開放平臺創建應用、用戶授權及應用授權

支付寶開放平臺創建應用、用戶授權及應用授權

htm 基礎 業務 day word tin 如果 comment from

學習 · 分享

銀盒子技術團隊分享平臺

支付寶開放平臺創建應用、用戶授權及應用授權

支付寶開放平臺創建應用、用戶授權及應用授權

一、創建應用

1、登錄螞蟻金服開放平臺(open.alipay.com),

2、進入開發者中心中,創建登記您的應用,並提交審核,審核通過後會為您生成應用唯一標識(APPID)《開放平臺應用創建指南》

二、配置密鑰

1、 開發者調用接口前需要先生成RSA密鑰,RSA密鑰包含應用私鑰(APP_PRIVATE_KEY)、應用公鑰(APP_PUBLIC_KEY)。

2、生成密鑰後在開放平臺開發者中心進行密鑰配置,配置完成後可以獲取支付寶公鑰(ALIPAY_PUBLIC_KEY) 註:生成密鑰方法連接(生成與配置),生成密鑰工具下載WINDOWS

三、搭建配置開發環境

服務端SDK下載地址:SDK1.5

AlipayClient alipayClient = new DefaultAlipayClient(URL, APP_ID, APP_PRIVATE_KEY, FORMAT, CHARSET, ALIPAY_PUBLIC_KEY, SIGN_TYPE);

關鍵參數(公共)說明:

配置參數 示例值解釋 獲取方式/示例值
URL 支付寶網關(固定) https://openapi.alipay.com/gateway.do
APPID APPID 即創建應用後生成 獲取見上面應用設置
APP_PRIVATE_KEY 開發者私鑰,由開發者自己生成 獲取詳見上面應用設置
FORMAT 參數返回格式,只支持json json(固定)
CHARSET 編碼集,支持GBK/UTF-8 開發者根據實際工程編碼配置
ALIPAY_PUBLIC_KEY 支付寶公鑰,由支付寶生成 獲取詳見上面應用設置
SIGN_TYPE 商戶生成簽名字符串所使用的簽名算法類型,目前支持RSA2和RSA,推薦使用RSA2 RSA2

1.、用戶信息授權(用戶信息授權)

用戶信息授權主要是為了獲取支付寶用戶ID(USER_ID)、授權令牌(access_token),便於開發者處理自身業務邏輯的時候使用

用戶信息授權URL拼裝規則:

https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?app_id=APPID&scope=SCOPE&redirect_uri=ENCODED_URL

2、應用授權(應用授權概述)

應用授權URL拼裝規則:

https://openauth.alipay.com/oauth2/appToAppAuth.htm?app_id=APPID&scope=SCOPE&redirect_uri=ENCODED_URL

私有請求參數:

參數 參數名稱 類型 必填 描述 範例
grant_type 授權類型 String 1.code換token

2.Refresh_token換

Token

1.authorization_code

2. refresh_token

code 授權碼 String bf67d8d5ed754af297f72cc482
refresh_token 刷新令牌 String 與code二選一 201510BB0c409dd5758b4d939d4008a525X62

註:接口權限值,目前只支持auth_user(獲取用戶信息、網站支付寶登錄)、auth_base(用戶信息授權)、auth_ecard(商戶會員卡)、auth_invoice_info(支付寶閃電開票)、auth_puc_charge(生活繳費)五個值;

四、關於沙箱

沙箱是開放平臺提供給開發者用戶調試接口的環境,具體操作步驟見 沙箱接入指南。

獲取用戶信息沙箱接入註意點

1、獲取用戶信息支持沙箱接入;在沙箱調通接口後,必須在線上進行測試與驗收,所有返回碼及業務邏輯以線上為準;

2、沙箱授權url鏈接拼接規則為:

https://openauth.alipaydev.com/oauth2/publicAppAuthorize.htm?app_id=APPID&scope=SCOPE&redirect_uri=ENCODED_URL

數據庫 30條軍規(轉載)

轉載地址:
http://blog.csdn.net/jiangzhexi/article/details/55817047?utm_source=itdadao&utm_medium=referral

軍規適用場景:並發量大、數據量大的互聯網業務
軍規:介紹內容
解讀:講解原因,解讀比軍規更重要

一、基礎規範

(1)必須使用InnoDB存儲引擎
解讀:支持事務、行級鎖、並發性能更好、CPU及內存緩存頁優化使得資源利用率更高

(2)必須使用UTF8字符集
解讀:萬國碼,無需轉碼,無亂碼風險,節省空間

(3)數據表、數據字段必須加入中文註釋
解讀:N年後誰tm知道這個r1,r2,r3字段是幹嘛的

(4)禁止使用存儲過程、視圖、觸發器、Event
解讀:高並發大數據的互聯網業務,架構設計思路是“解放數據庫CPU,將計算轉移到服務層”,並發量大的情況下,這些功能很可能將數據庫拖死,業務邏輯放到服務層具備更好的擴展性,能夠輕易實現“增機器就加性能”。數據庫擅長存儲與索引,CPU計算還是上移吧

(5)禁止存儲大文件或者大照片
解讀:為何要讓數據庫做它不擅長的事情?大文件和照片存儲在文件系統,數據庫裏存URI多好

二、命名規範

(6)只允許使用內網域名,而不是ip連接數據庫

(7)線上環境、開發環境、測試環境數據庫內網域名遵循命名規範

業務名稱:xxx
線上環境:dj.xxx.db
開發環境:dj.xxx.rdb
測試環境:dj.xxx.tdb
從庫在名稱後加-s標識,備庫在名稱後加-ss標識
線上從庫:dj.xxx-s.db
線上備庫:dj.xxx-sss.db

(8)庫名、表名、字段名:小寫,下劃線風格,不超過32個字符,必須見名知意,禁止拼音英文混用

(9)表名t_xxx,非唯一索引名idx_xxx,唯一索引名uniq_xxx

三、表設計規範
(10)單實例表數目必須小於500

(11)單表列數目必須小於30

(12)表必須有主鍵,例如自增主鍵
解讀:
a)主鍵遞增,數據行寫入可以提高插入性能,可以避免page分裂,減少表碎片提升空間和內存的使用
b)主鍵要選擇較短的數據類型, Innodb引擎普通索引都會保存主鍵的值,較短的數據類型可以有效的減少索引的磁盤空間,提高索引的緩存效率
c) 無主鍵的表刪除,在row模式的主從架構,會導致備庫夯住

(13)禁止使用外鍵,如果有外鍵完整性約束,需要應用程序控制
解讀:外鍵會導致表與表之間耦合,update與delete操作都會涉及相關聯的表,十分影響sql 的性能,甚至會造成死鎖。高並發情況下容易造成數據庫性能,大數據高並發業務場景數據庫使用以性能優先

四、字段設計規範

(14)必須把字段定義為NOT NULL並且提供默認值
解讀:
a)null的列使索引/索引統計/值比較都更加復雜,對MySQL來說更難優化
b)null 這種類型MySQL內部需要進行特殊處理,增加數據庫處理記錄的復雜性;同等條件下,表中有較多空字段的時候,數據庫的處理性能會降低很多
c)null值需要更多的存儲空,無論是表還是索引中每行中的null的列都需要額外的空間來標識
d)對null 的處理時候,只能采用is null或is not null,而不能采用=、in、<、<>、!=、not in這些操作符號。如:where name!=’shenjian’,如果存在name為null值的記錄,查詢結果就不會包含name為null值的記錄

(15)禁止使用TEXT、BLOB類型
解讀:會浪費更多的磁盤和內存空間,非必要的大量的大字段查詢會淘汰掉熱數據,導致內存命中率急劇降低,影響數據庫性能

(16)禁止使用小數存儲貨幣
解讀:使用整數吧,小數容易導致錢對不上

(17)必須使用varchar(20)存儲手機號
解讀:
a)涉及到區號或者國家代號,可能出現+-()
b)手機號會去做數學運算麽?
c)varchar可以支持模糊查詢,例如:like“138%”

(18)禁止使用ENUM,可使用TINYINT代替
解讀:
a)增加新的ENUM值要做DDL操作
b)ENUM的內部實際存儲就是整數,你以為自己定義的是字符串?

五、索引設計規範
(19)單表索引建議控制在5個以內

(20)單索引字段數不允許超過5個
解讀:字段超過5個時,實際已經起不到有效過濾數據的作用了

(21)禁止在更新十分頻繁、區分度不高的屬性上建立索引
解讀:
a)更新會變更B+樹,更新頻繁的字段建立索引會大大降低數據庫性能
b)“性別”這種區分度不大的屬性,建立索引是沒有什麽意義的,不能有效過濾數據,性能與全表掃描類似

(22)建立組合索引,必須把區分度高的字段放在前面
解讀:能夠更加有效的過濾數據

六、SQL使用規範

(23)禁止使用SELECT *,只獲取必要的字段,需要顯示說明列屬性
解讀:
a)讀取不需要的列會增加CPU、IO、NET消耗
b)不能有效的利用覆蓋索引
c)使用SELECT *容易在增加或者刪除字段後出現程序BUG

(24)禁止使用INSERT INTO t_xxx VALUES(xxx),必須顯示指定插入的列屬性
解讀:容易在增加或者刪除字段後出現程序BUG

(25)禁止使用屬性隱式轉換
解讀:SELECT uid FROM t_user WHERE phone=13812345678 會導致全表掃描,而不能命中phone索引,猜猜為什麽?(這個線上問題不止出現過一次)

(26)禁止在WHERE條件的屬性上使用函數或者表達式
解讀:SELECT uid FROM t_user WHERE from_unixtime(day)>=’2017-02-15′ 會導致全表掃描
正確的寫法是:SELECT uid FROM t_user WHERE day>= unix_timestamp(‘2017-02-15 00:00:00’)

(27)禁止負向查詢,以及%開頭的模糊查詢
解讀:
a)負向查詢條件:NOT、!=、<>、!<、!>、NOT IN、NOT LIKE等,會導致全表掃描
b)%開頭的模糊查詢,會導致全表掃描

(28)禁止大表使用JOIN查詢,禁止大表使用子查詢
解讀:會產生臨時表,消耗較多內存與CPU,極大影響數據庫性能

(29)禁止使用OR條件,必須改為IN查詢
解讀:舊版本mysql的OR查詢是不能命中索引的,即使能命中索引,為何要讓數據庫耗費更多的CPU幫助實施查詢優化呢?

(30)應用程序必須捕獲SQL異常,並有相應處理

總結:大數據量高並發的互聯網業務,極大影響數據庫性能的都不讓用,不讓用喲。

如何用0.01元購買一瓶可樂

1.老實辦法
我只有一分錢,可樂三塊錢一瓶。那我就只買1/300瓶好了。
2.拼單分享
我有一分錢,可樂三塊錢,那我找到其他幾個想喝可樂但沒有三塊/喝不完一瓶的人湊足剩余的2.99,買到可樂大家分。
3.交易增值
用一分錢換一根針,用一根針換一卷線,用一卷線換一個李子……最終通過交易疊加價值換到可樂。
4.搶占最後最低價值
在一瓶可樂保質期到的前幾秒買下他。
5.覆蓋邊際成本
花900塊買300瓶雪碧,趁機向老板提要求加一分錢讓他多送一瓶可樂。
6.尾單掃貨辦法
找到一家產值過剩倒閉的可樂廠,去庫房裏試著買一瓶。
7.誅心輿論辦法
大肆宣揚可樂有毒,等到可樂降價到一分。
8.炒作升值辦法
給手上的一分錢賦予其他意義,直到它的市場價格超過可樂。
9.臭不要臉辦法
拿著一分錢,死皮賴臉問老板要不給就在他店門口一哭二鬧三上吊。
10. 分期付款
第一期1分,第二期X元

還要更多有發散性的運營產品套路參考更多:http://www.pmcaff.com/discuss/index/919244833555520

銀盒子基礎交互規範

1 可點擊的按鈕或者鏈接或者整體圖片等可點擊的區域,鼠標移動上去都用手勢 ,無論是功能按鈕還是鏈接等; 2 單選或者復選, 不應該只選擇小圖標的時候才能切換,應該是對應的文字或者區域都可以切換是否選中

spring事務提交的異常處理

當在一個service的類中,當提交事務發生異常時,,企圖使用try{}catch防止前面的保存更新不回滾無效,比如在一個service方法同時有兩個與數據庫打交道的地方:

Order o=new Order();
//do set order 設置order的屬性….

this.orderService.saveOrUpdateOrder(o);//保存order

OrderExtend oe=new OrderExtend();

oe.setJobNum(o.getOrderNum());
//do set OrderExtend 設置OrderExtend的屬性….
/***************以下try企圖保證出異常時不讓order的數據回滾*****/
try {
this.orderExtendService.addOrderExtend(oe);//保存orderextend
} catch (Exception e) {
// TODO: handle exception
}

以上的代碼如果this.orderExtendService.addOrderExtend(oe);提交事務後發生異常,try{}catch並不起作用,order的保存照樣回滾。

那如何實現當OrderExtend 提交事務處問題時,不影響前面的事務呢,假如OrderExtend 的數據相對無關緊要?

可以通過不同的線程進行提交事務,相當於事務獨立開來:

/******************分開線程提交事務******************************************/

Order o=new Order();
//do set order 設置order的屬性….

this.orderService.saveOrUpdateOrder(o);//保存order

OrderExtend oe=new OrderExtend();

oe.setJobNum(o.getOrderNum());
//do set OrderExtend 設置OrderExtend的屬性….
/***************以下try企圖保證,出異常不讓order的數據回滾*****/
try {
//使用獨立線程進行orderExtend的保存,確保事務提交失敗不導致前面Order的保存的回滾

new Thread(new HttpUtil().buildRequest(dosaveOrderExtend(), oe, 10000, 10000, “UTF-8”)).start();
} catch (Exception e) {
// TODO: handle exception
}

三步完成阿裏巴巴-Druid監控配置

第一步:在數據源配置文件阿裏 druid數據庫連接池增加監聽過濾參數

代碼:

<!– 配置監控統計攔截的filters,去掉後監控界面sql無法統計 –>

<beans:property name=“filters” value=“stat,wall,log4j” />

<!– 並在filters屬性中配置了log4j –>

<beans:property name=“proxyFilters”>

<beans:list>

<beans:ref bean=“stat-filter” />

<beans:ref bean=“log-filter” />

</beans:list>

</beans:property>

第二步:在web.xml增加Druid監控的Servlet

代碼:

<!– druid web 監控 –>

<servlet>

<servlet-name>DruidStatView</servlet-name>

<servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>

<init-param>

<!– 用戶名 –>

<param-name>loginUsername</param-name>

<param-value>druid</param-value>

</init-param>

<init-param>

<!– 密碼 –>

<param-name>loginPassword</param-name>

<param-value>bounter</param-value>

</init-param>

</servlet>

<servlet-mapping>

<servlet-name>DruidStatView</servlet-name>

<url-pattern>/druid/*</url-pattern>

</servlet-mapping>

第三步:重啟項目訪問http://ip:端口/項目名/druid/index.html

如:http://test.blibao.com/sweep/druid/index.html

備註:監控內容包括sql監控,URI監控,session監控,Spring監控

Sql監控可以看到項目裏所有執行的sql語句包括查詢、插入、刪除並且可以按照執行時間排序方便發現項目內執行的慢sql,同時可以找到哪些sql語句是通過HQL註入執行的。

URI監控可以查看項目所有的訪問地址,方便發現哪些請求是高頻發生

Session監控可以查看本次會話請求次數,方便哪些用戶在惡意訪問

轉載學習


支付寶開放平臺創建應用、用戶授權及應用授權