032 對接支付寶系統

2021-09-23 15:44:00 字數 3861 閱讀 2138

支付寶開放平台入口

1.建立應用

2.沙箱環境

支付寶提供給開發者的模擬支付的環境。跟真實環境是分開的。

1、使用者下單並呼叫alipay.trade.page.pay,發起支付請求

2、使用者輸入使用者名稱,支付密碼,並登陸

3、使用者選擇支付渠道,輸入支付密碼

4、使用者確認支付

5、支付寶get請求returnurl,返回同步返回引數

6、支付寶post請求notifyurl,返回非同步通知引數

7、**系統呼叫alipay.trade.query檢視交易狀態

$ openssl

$ openssl> exit

-----begin public key-----

支付寶公鑰內容

-----end public key-----

選項方案

請求方法

get請求位址

/payment/(?p\d+)/

2.請求引數:路徑引數

引數名型別

是否必傳

說明order_id

int是

訂單編號

3.響應結果:json

字段說明

code

狀態碼errmsg

錯誤資訊

alipay_url

支付寶登入鏈結

4.後端介面定義和實現

# 測試賬號:[email protected]

class paymentview(loginrequiredjsonmixin, view):

"""訂單支付功能"""

def get(self,request, order_id):

# 查詢要支付的訂單

user = request.user

try:

order = orderinfo.objects.get(order_id=order_id, user=user, status=orderinfo.order_status_enum['unpaid'])

except orderinfo.doesnotexist:

return http.httpresponseforbidden('訂單資訊錯誤')

# 建立支付寶支付物件

alipay = alipay(

alipay_public_key_path=os.path.join(os.path.dirname(os.path.abspath(__file__)), "keys/alipay_public_key.pem"),

sign_type="rsa2",

debug=settings.alipay_debug

)# 生成登入支付寶連線

order_string = alipay.api_alipay_trade_page_pay(

out_trade_no=order_id,

total_amount=str(order.total_amount),

subject="美多**%s" % order_id,

return_url=settings.alipay_return_url,

)# 響應登入支付寶連線

alipay_url = settings.alipay_url + "?" + order_string

return http.jsonresponse()

5.支付寶sdk配置引數

# 支付寶

alipay_debug = true # 表示是沙箱環境還是真實支付環境

alipay_url = ''

alipay_return_url = ''

我們需要將訂單編號和交易流水號進行關聯儲存,方便使用者和商家後續使用。

class payment(basemodel):

"""支付資訊"""

order = models.foreignkey(orderinfo, on_delete=models.cascade, verbose_name='訂單')

trade_id = models.charfield(max_length=100, unique=true, null=true, blank=true, verbose_name="支付編號")

class meta:

db_table = 'tb_payment'

verbose_name = '支付資訊'

verbose_name_plural = verbose_name

1.請求方式

選項方案

請求方法

get請求位址

/payment/status/

2.請求引數:路徑引數

參考統一收單下單並支付頁面介面中的《頁面回跳引數》

3.響應結果:html

pay_success.html

4.後端介面定義和實現

注意:儲存訂單支付結果的同時,還需要修改訂單的狀態為待評價

# 測試賬號:[email protected]

class paymentstatusview(view):

"""儲存訂單支付結果"""

def get(self, request):

# 獲取前端傳入的請求引數

query_dict = request.get

data = query_dict.dict()

# 獲取並從請求引數中剔除signature

signature = data.pop('sign')

# 建立支付寶支付物件

alipay = alipay(

alipay_public_key_path=os.path.join(os.path.dirname(os.path.abspath(__file__)), "keys/alipay_public_key.pem"),

sign_type="rsa2",

debug=settings.alipay_debug

)# 校驗這個重定向是否是alipay重定向過來的

success = alipay.verify(data, signature)

if success:

# 讀取order_id

order_id = data.get('out_trade_no')

# 讀取支付寶流水號

trade_id = data.get('trade_no')

# 儲存payment模型類資料

payment.objects.create(

order_id=order_id,

trade_id=trade_id

)# 修改訂單狀態為待評價

orderinfo.objects.filter(order_id=order_id, status=orderinfo.order_status_enum['unpaid']).update(

status=orderinfo.order_status_enum["uncomment"])

# 響應trade_id

context =

return render(request, 'pay_success.html', context)

else:

# 訂單支付失敗,重定向到我的訂單

return http.httpresponseforbidden('非法請求')

5.渲染支付成功頁面資訊

訂單支付成功

您的訂單已成功支付,支付交易號:}

您可以在【使用者中心】->【我的訂單】檢視該訂單

golang對接支付寶支付

沙箱環境 金鑰 文件已經很詳細了,附鏈結 使用的第三方庫 簡單實現 網頁支付 應用公鑰 alipublickey 應用私鑰 privatekey func init 手機客戶端支付 func wapalipay binary,url.marshalbinary fmt.println string ...

laravel 對接支付寶

omnipay alipay 這個就不說了,不明白如何下手的夥伴讓運營去和支付寶客服聯絡吧 將以下 新增到 composer.json 執行composer命令更新依賴 curl s php php composer.phar update該庫提供了 6 種不同的介面,各種介面有不同的配置和用法,我...

支付寶香港對接

支付寶香港api對接,非常的簡單,由於文件是跟對接人溝通的,我就不發出來了,先看看效果。圖一支付成功。圖二支付失敗,原因15分鐘不掃碼就過期。重新在生成merchant reference 唯一id 上 如下 internal class hash256 else return builder.to...