2017/11/13

最近 pipenv を使っているのでメモ

Pipfile の作成

cd path/to/dir
% pipenv --python 3.6

Pipfile にモジュールを追加

% pipenv install django
Installing django…
Collecting django
  Downloading Django-1.11.7-py2.py3-none-any.whl (6.9MB)
Collecting pytz (from django)
  Downloading pytz-2017.3-py2.py3-none-any.whl (511kB)
Installing collected packages: pytz, django
Successfully installed django-1.11.7 pytz-2017.3

Adding django to Pipfile's [packages]…
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
Updated Pipfile.lock (374a8f)!
pipenv install django  8.40s user 10.43s system 64% cpu 29.142 total

shell に venv 環境を読み込む

% pipenv shell

ペイ近況3

※ 2017/08/31 11:18 追記

Payment Request API と Pay with Google のレイヤーを逆に捉えていたため勘違いがありました。

@agektmr さんと @ymotongpoo さんから色々とご指摘いただきました。 ありがとうございました。

Payment Request API

  • W3C で策定されている
  • ブラウザに保存しているクレジットカード番号を JS を使って引っ張ってこれるブラウザの API
  • 各ブラウザに保存しているクレジットカード情報や住所などを取得できる、支払い方法の橋渡しをするブラウザAPI
  • 各ブラウザで決済ダイアログのようなものが表示される
  • Chrome for Android ではすでに使える。Chrome for Desktop は 61 から
    • Edge は実装済み。Firefox, Safari はデスクトップ、モバイル共に未実装だがサポート予定
  • 上のブラウザ全てで実装されたとしても古いOS、ブラウザが残っている限りクライアント側で何らかの fallback が必要
    • 使用の可不可は window.PaymentRequest で判断
    • fallback 用に自前でフォームを用意してもいいが、可不可の判断も JS で行うため PSP 各社が提供している Checkout と呼ばれるライブラリを使うことが、Payment Request API を使った時の UX 的にも似せられるため現実的
    • PSP が提供している Checkout 側で、Payment Request API が使える場合はそちらを優先して処理させることは技術的には問題ないが、Payment Request API では住所や商品名など Checkout 側では想定していないデータも取得が可能
    • Payment Request API のオプションで上記の Checkout では取れないデータを最初から表示させない選択肢もあるみたいだが、取得できるものを全員が制限したいとは限らないため、ECサイトの運営者など、組み込む側が要件に応じて使いこなせると柔軟に対応できる

Payment Handler API

  • Web には Payment Handler API という仕様があり、Payment Request API決済手段サードパーティーが追加できる仕組みがある
  • その仕様に沿って実装すると Payment Request API から決済を行う際に選択肢の一つとして表示される

Pay with Google

  • Google Payment Solutions
  • まだ未公開(たぶん)
  • Google の持っているいくつかの決済手段を提供する
  • Alipay や Samsung Pay、Android Pay などのペイメントアプリと同じレイヤー
  • Payment Request API を通してのみ Web での利用可能が可能。Payment Request API の決済選択肢の1つとして選択できる
    • Web で使用する場合は Service Worker を通してアクセスする

f:id:wozozo:20170831004423p:plain

  • Payment Request API はブラウザに保存されているクレジットカード情報を取り出すだけの機能であるのに対し、Google Payment API はクレジットカード以外での決済も可能
  • Payment Request API と同じくブラウザや payments.google.com に保存されいてるクレジットカード情報や、Android Pay、サードパーティーの決済アプリを決済手段に選択できる
  • OS やブラウザ側がネイティブの UI を表示してくれるため、UI の作成を行う必要がなく、決済方法もクレジットカード以外の選択肢がある → Web で使う場合の UI は全て Payment Request API が担う
  • ただし EC サイト側で各決済手段ごとの merchant になっていないと決済されたお金を受け取れないため、たとえば Alipay アプリと Pay with Google ボタンさえあればどこでも使えるというわけではない…はず…。ので、各 PSP に対して利用申請などを行う必要がある
  • サードパーティー乱立の混沌期がありそうな気がするけど体力のあるところ1,2社以外はそのうち消え去りそう (Payment Request API と Pay with Google (Payment Handler) のレイヤーを逆に捉えていたため勘違いでした)

f:id:wozozo:20170831010425p:plain

Apple

  • macOS, iOS 共に Safari Webkit では Payment Request API を実装中らしい
  • Apple Pay on the Web の実装は Payment Request API と比べると複雑であるため、Payment Request API に対応し、Safari に保存されたクレジットカードと Apple Pay に登録したカードも選択肢として使用できるようになることを願ってる
  • しかし、もし Apple Pay のカードを Payment Request API で使用できるようになってしまうと、現状日本ではブランドを通したクレジットカードとして Visa は使用できないため、Visa が使えない状態がやってくる
  • Safari に保存されているクレジットカード情報は問題なく Payment Request API で取得できると思うが、Apple Pay に登録されているクレジットカードのうち Visa カードは、現状 Visa としては使用不可でありブランドロゴも表示されておらずオンアス決済による iD や Quicpay などの電子マネーでしかないため、Apple - Visa 間の契約が変わらない限りは Apple Pay に登録してある Visa カードを使用できるとは思えないんですがどうなるんでしょう…

間違ってるところがあったらおしえてください

参考

2017/05/13

autopep8

pep8 とかよくわかってなかったときに書いたコードなので、今開くと至る所で linter がエラーを吐く。エラー表示がめんどくさいのでとりあえず一括置換してエラーを抑えた

find ./**/*.py -type f -name '*.py' -print -exec autopep8 -i --aggressive --ignore E123,E711,E712 --max-line-length=300 '{}' \;s

django.contrib.auth.user.get_profile

大昔は django.contrib.auth.userget_profile メソッドが生えていた気がしたけど最近のものには無くなっていた。UserProfile model から User model へ fk field が貼られていたのを OneToOneField に変更し、 request.user.get_profile() でアクセスしていた箇所を request.user.profile に全て直した。 AUTH_PROFILE_MODULE 設定ももう無いらしい。

2017/04/18

古い Django からの移行

だいぶ古い Django で動いているアプリケーションを最新のものにあげる作業をしている。runserver で起動すらしないので10個近いバージョンのリリースログから変更点を探しながら書き換えている。直したい箇所だらけだけど先にバージョンアップを終わらせないと移行が終わらない。

django-storages を Google Cloud Storage (GCS) で使う

S3 をバックエンドにした情報はいくらでも出て来るけど GCS に切り替える話は探してもあまり出てこなくて時間を食ったので書いておく。

GCP に差し替えるための設定を settings.py に。

MEDIA_URL = 'https://{projectid}.storage.googleapis.com/'
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'

AWS_ACCESS_KEY_ID = 'AAAAAAAAAAAA'
AWS_SECRET_ACCESS_KEY = 'BBBBBBBBBBBBBBBBBBBBBBBBBBBBB'
AWS_STORAGE_BUCKET_NAME = '{bucket_name}'
AWS_S3_ENDPOINT_URL = 'http://storage.googleapis.com/'

AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY に設定する値は下の画面から取得できた。

f:id:wozozo:20170418203017p:plain