老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

Python怎么實現微信小程序支付功能-創新互聯

這篇文章主要介紹Python怎么實現微信小程序支付功能,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

大通ssl適用于網站、小程序/APP、API接口等需要進行數據傳輸應用場景,ssl證書未來市場廣闊!成為成都創新互聯公司的ssl證書銷售渠道,可以享受市場價格4-6折優惠!如果有意向歡迎電話聯系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!

正文

由于最近自己在做小程序的支付,就在這里簡單介紹一下講一下用python做小程序支付這個流程。當然在進行開發之前還是建議讀一下具體的流程,清楚支付的過程。

1.支付交互流程

當然具體的參數配置可以參考官方文檔https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_3&index=1

2.獲取openid(微信用戶標識)

 import requests
 from config import APPID, SECRET
 class OpenidUtils(object):
  def __init__(self, jscode):
   self.url = "https://api.weixin.qq.com/sns/jscode2session"
   self.appid = APPID # 小程序id
   self.secret = SECRET # 不要跟后面支付的key搞混
   self.jscode = jscode # 前端傳回的動態jscode
  def get_openid(self):
   # url一定要拼接,不可用傳參方式
   url = self.url + "?appid=" + self.appid + "&secret=" + self.secret + "&js_code=" + self.jscode + "&grant_type=authorization_code"
   r = requests.get(url)
   print(r.json())
   openid = r.json()['openid']
   return openid

3.支付請求

# -*- coding:utf-8 -*-
import requests
import hashlib
import xmltodict
import time
import random
import string
import urllib2
import sys
class WX_PayToolUtil():
 """ 微信支付工具 """
 def __init__(self, APP_ID, MCH_ID, API_KEY, NOTIFY_URL):
  self._APP_ID = APP_ID # 小程序ID
  self._MCH_ID = MCH_ID # # 商戶號
  self._API_KEY = API_KEY
  self._UFDODER_URL = "https://api.mch.weixin.qq.com/pay/unifiedorder" # 接口鏈接
  self._NOTIFY_URL = NOTIFY_URL # 異步通知
 def generate_sign(self, param):
   '''生成簽名'''
   stringA = ''
   ks = sorted(param.keys())
   # 參數排序
   for k in ks:
    stringA += (k + '=' + param[k] + '&')
   # 拼接商戶KEY
   stringSignTemp = stringA + "key=" + self._API_KEY
   # md5加密,也可以用其他方式
   hash_md5 = hashlib.md5(stringSignTemp.encode('utf8'))
   sign = hash_md5.hexdigest().upper()
   return sign
 '''
 # python2另外一種實現方法
 def generate_sign(self, params):
  ret = []
  for k in sorted(params.keys()):
   if (k != 'sign') and (k != '') and (params[k] is not None):
    ret.append('%s=%s' % (k, params[k]))
  params_str = '&'.join(ret)
  params_str = '%(params_str)s&key=%(partner_key)s' % {'params_str': params_str, 'partner_key': key}
  reload(sys)
  sys.setdefaultencoding('utf8')
  params_str = hashlib.md5(params_str.encode('utf-8')).hexdigest()
  sign = params_str.upper()
  return sign
 '''
 def getPayUrl(self, orderid, openid, goodsPrice, **kwargs):
  """向微信支付端發出請求,獲取url"""
  key = self._API_KEY
  nonce_str = ''.join(random.sample(string.letters + string.digits, 30)) # 生成隨機字符串,小于32位
  params = {
   'appid': self._APP_ID, # 小程序ID
   'mch_id': self._MCH_ID, # 商戶號
   'nonce_str': nonce_str, # 隨機字符串
   "body": '測試訂單', # 支付說明
   'out_trade_no': orderid, # 生成的訂單號
   'total_fee': str(goodsPrice), # 標價金額
   'spbill_create_ip': "127.0.0.1", # 小程序不能獲取客戶ip,web用socekt實現
   'notify_url': self._NOTIFY_URL,
   'trade_type': "JSAPI", # 支付類型
   "openid": openid, # 用戶id
   }
  # 生成簽名
  params['sign'] = self.generate_sign(params)
  # python3一種寫法
  param = {'root': params}
  xml = xmltodict.unparse(param)
  response = requests.post(self._UFDODER_URL, data=xml.encode('utf-8'), headers={'Content-Type': 'text/xml'})
  # xml 2 dict
  msg = response.text
  xmlmsg = xmltodict.parse(msg)
  # 4. 獲取prepay_id
  if xmlmsg['xml']['return_code'] == 'SUCCESS':
   if xmlmsg['xml']['result_code'] == 'SUCCESS':
    prepay_id = xmlmsg['xml']['prepay_id']
    # 時間戳
    timeStamp = str(int(time.time()))
    # 5. 五個參數
    data = {
     "appId": self._APP_ID,
     "nonceStr": nonce_str,
     "package": "prepay_id=" + prepay_id,
     "signType": 'MD5',
     "timeStamp": timeStamp,
    }
    # 6. paySign簽名
    paySign = self.generate_sign(data)
    data["paySign"] = paySign # 加入簽名
    # 7. 傳給前端的簽名后的參數
    return data
  # python2一種寫法
  '''
  request_xml_str = ''
  for key, value in params.items():
   if isinstance(value, str):
    request_xml_str = '%s<%s>' % (request_xml_str, key, value, key,)
   else:
    request_xml_str = '%s<%s>%s' % (request_xml_str, key, value, key,)
  request_xml_str = '%s' % request_xml_str
  # 向微信支付發出請求,并提取回傳數據
  res = urllib2.Request(self._UFDODER_URL, data=request_xml_str.encode("utf-8"))
  res_data = urllib2.urlopen(res)
  res_read = res_data.read()
  doc = xmltodict.parse(res_read)
  return_code = doc['xml']['return_code']
  if return_code == "SUCCESS":
   result_code = doc['xml']['result_code']
   if result_code == "SUCCESS":
    doc = doc['xml']
    data = {
     "appId": self._APP_ID,
     "nonceStr": nonce_str,
     "package": "prepay_id=" + doc["prepay_id"],
     "signType": 'MD5',
     "timeStamp": str(int(time.time())),
    }
    # paySign簽名
    paySign = self.generate_sign(data)
    data["paySign"] = paySign # 加入簽名
    return data
   else:
    err_des = doc['xml']['err_code_des']
    return err_des 
  else:
   fail_des = doc['xml']['return_msg']
   return fail_des
  '''

當然你可能會遇到的錯誤有簽名錯誤,一般的情況是你的appSecret和商戶號的API密鑰兩個弄錯了,當然如果不是還有可能是其他問題,解決方案鏈接 https://www.jb51.net/article/166176.htm 。

其他的支付方式獲取用戶的ip地址可以通過socket.gethostbyname(socket.gethostname())方法來獲取。

4.支付回調

# 統一下單回調處理
import xmltodict
from django.http import HttpResponse
def payback(request):
 msg = request.body.decode('utf-8')
 xmlmsg = xmltodict.parse(msg)
 return_code = xmlmsg['xml']['return_code']
 if return_code == 'FAIL':
  # 官方發出錯誤
  return HttpResponse("""
       """,
       content_type='text/xml', status=200)
 elif return_code == 'SUCCESS':
  # 拿到這次支付的訂單號
  out_trade_no = xmlmsg['xml']['out_trade_no']
  # 根據需要處理業務邏輯
  return HttpResponse("""
       """,
       content_type='text/xml', status=200)

當然微信回調的參數有很多詳細可以參考https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_7&index=8

在回調的時候可能遇到這樣一個問題,支付成功以后沒有調回調函數,有可能是回調地址是https然后改為http就行,遇到過這個坑,具體原因也不知道。服務器沒有屏蔽https訪問,https證書也沒有問題,把https改為http最后就可以了。

5.安全問題

在使用的過程中商戶系統對于支付結果通知的內容一定要做簽名驗證,并校驗返回的訂單金額是否與商戶側的訂單金額一致,防止數據泄漏導致出現“假通知”,造成資金損失。

我在開發過程中的解決方式是在向微信支付端發起請求的時候,把訂單號,金額,簽名等存入數據庫,然后在回調函數那里進行校驗判斷。在確認跟前面訂單情況一樣的情況下,才進行后續一系列的操作。

最后送給大家一段祝福

#         _oo8oo_
#         o8888888o
#         88" . "88
#         (| -_- |)
#         0\ = /0
#        ___/'==='\___
#        .' \\|  |# '.
#       / \\||| : |||# \
#       / _||||| -:- |||||_ \
#       | | \\\ - #/ | |
#       | \_| ''\---/'' |_/ |
#       \ .-\__ '-' __/-. /
#      ___'. .' /--.--\ '. .'___
#      ."" '< '.___\_<|>_/___.' >' "".
#     | | : `- \`.:`\ _ /`:.`/ -` : | |
#     \ \ `-. \_ __\ /__ _/ .-` / /
#    =====`-.____`.___ \_____/ ___.`____.-`=====
#         `=---=`
#
#
#    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
#

以上是“Python怎么實現微信小程序支付功能”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注創新互聯成都網站設計公司行業資訊頻道!

另外有需要云服務器可以了解下創新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。


文章題目:Python怎么實現微信小程序支付功能-創新互聯
鏈接URL:http://www.xueling.net.cn/article/dojgoh.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 九七av| 亚洲影院天堂 | 免费成人黄色片 | 国产91色欲麻豆精品一区二区 | 久久九九久久精品 | 亚洲天天在线日亚洲洲精 | 日韩黄色大片网站 | 国产成人久久久精品二区三区 | 国产丝袜精品视频 | 日韩精品一区二区三区中文精品 | 亚洲AV永久无码精品桃花岛知道 | 青娱乐国产精品视频 | 给丰满丁字裤少妇按摩到高潮 | 国产一级视频免费观看 | 中国av一区二区三区 | 一级肉体全黄裸片免费观看 | 亚洲精品aaaaa | 欧美日韩成人精品久久二区 | 国产激情一级毛片久久久 | 色欲av久久无码影院色戒 | 国产又粗又硬又黄视频免费着 | 绯色av一区 | 无码人妻一区二区三区免费手机 | 年轻的朋友4韩剧在线观看 少妇人体色www网站 | 欧美人与动人物牲交免费观看 | 国产午夜性春猛交ⅹxxx | 精品国产一卡2卡3卡4卡新区 | 亚洲经典日韩欧美国产一区 | 91免费在线?看网站 精东av在线 | 男女好痛好深好爽视频一区 | 最新av免费观看 | 777米奇色888狠狠俺去啦 | 延禧攻略在线 | 亚欧洲乱码专区网站 | 国产精品久久久久久久久久嫩草 | 国产女主播视频一区二区三区 | 少妇与大狼拘作爱性A片 | 老熟妇性色老熟妇性 | 香港成人A级毛片免费看 | 日本无人区码卡二卡三卡 | 国产日产欧产精品精品浪潮 |