Transfert: https://www.cnblogs.com/zzqit/p/9952302.html#_label3
Avant d'écrire la fonction, le dos et l'examiner, faire une note de
Vous voulez réaliser cette fonction, l'applet côté micro canal est:
wx.requestPayment ( { ' timeStamp ' : res.data.data [ " timeStamp " ], ' nonceStr ' : res.data.data [ " nonceStr " ], ' package ' : res.data.data [ " paquet " ], ' signType ' : ' MD5 ' , ' paySign ' : res.data.data [ " paySign " ], " succès' : Function (res) { si (res.errMsg == " requestPayment: ok " ) { wx.showToast ({ title: ' 支付成功' icône: ' succès ' durée: 1000 }) } }, ' échec ' : fonction (res) { }, ' complète ' : function (res) { } })
Avant d'appeler wx.requestPayment façon de le faire, nous devons préparer les données à res.data.data fournies, qui est, backstage pass sur les données
Contexte générer ces données ne nécessite qu'un petit programme utilisateur fournit Openid sur elle
Arrière-plan généré des données de code:
wechat_pay DEF (): goods_price . = request.args GET ( "prix " ) Openid . = g.current_user GET ( " openid " ) AppID = " " # applet appid, applets - développement - paramètres de développement où trouver mch_id = " « payer le numéro de marchand # micro-canal, pay micro-canal | plateforme marchand - Centre des comptes - des informations commerciales où trouver api_key = » « touches #api, pay micro-canal | plateforme marchand - compte de la sécurité Centre -API dans la recherche notify_url = » « # rappel succès de paiement chemin OrderID = datetime.datetime.now (). la strftime ( ' % m% D le% Y H% m% S% ' =) Nombre de temps pour le numéro de commande infosWX_PayToolUtil (AppID, mch_id, api_key, notify_url) données = info.getPayUrl (orderid, Openid, goods_price) retour json_response ( 0 , data = données)
Procédé WX_PayToolUtil:
# Codage = UTF- 8 Importation Demande d' importation hashlib importation xmltodict importation Temps d' importation aléatoire Importation chaîne de hasard Importation aléatoire classe WX_PayToolUtil (): " "" instruments de paiement microcanaux " "" DEF __init __ (Self APP_ID MCH_ID, api_key, notify_url): self._APP_ID = APP_ID # applet ID self._MCH_ID = MCH_ID # # numéro d' entreprise self._API_KEY = clés marchands api_key n self._UFDODER_URL = " https://api.mch.weixin.qq.com/pay/unifiedorder " # Interface lien self._NOTIFY_URL= Notify_url # notification asynchrone DEF generate_sign (Self, param): '' ' pour générer une signature ' '' stringUn = '' KS = le trié (param.keys ()) les valeurs des paramètres # clés sont triés pour K dans KS: stringUn + = (K + ' = ' + param [K] + ' & ' ) # marchand d'épissure KEY stringSignTemp = stringUn + " Key = " + self._API_KEY # cryptage MD5, peut également être utilisé dans d' autres façons hash_md5 = hashlib.md5 (stringSignTemp.encode ( ' UTF8 ')) Signe = . Hash_md5.hexdigest () supérieur () retour signe DEF random_str (Self): "" " générer une chaîne aléatoire : param randomlength: longueur de la chaîne : retour : " "" DOD = '' caractères = ' AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789 ' longueur = (len caractères) - 1. aléatoire = le Random () pour I dans Range ( 0 , 30 ): DOD + = caractères [la random.randint ( 0 , longueur)] retour DOD getPayUrl DEF (auto, OrderID, OpenID, goodsPrice, ** kwargs): "" " envoie une demande au terminal de paiement micro-canal, acquiert URL " "" Key = self._API_KEY nonce_str = self.random_str () # génère une chaîne aléatoire, est inférieure à 32 params = { ' AppID ' : self._APP_ID, # applet ID ' mch_id ' : self._MCH_ID, numéro de marchand # ' nonce_str ' : nonce_str, string # aléatoire " corps " : ' Learning Card ' , # paiement ' out_trade_no ': ORDERID, # produit Numéro de commande ' Total_fee ' : str (goodsPrice), # montant de l' enchère ' de spbill_create_ip ' : " " , # IP du terminal, votre serveur IP ' notify_url ' : self._NOTIFY_URL, ' trade_type ' : " JSAPI " , # type de paiement " OpenId " : Openid , l' utilisateur ID # } # génère la signature des params [ ' signe ' ] = self.generate_sign ( les params ) param = { ' la racine ' : }params xml = xmltodict.unparse (param) réponse = requests.post (self._UFDODER_URL, data = xml.encode ( ' utf-8 ' ), les en- têtes = { ' Content-Type ' : ' text / xml ' }) # xml 2 dict msg = response.text xmlmsg = xmltodict.parse (msg) # 4 . 获取prepay_id si xmlmsg [ ' xml ' ] [ ' code_retour ' ] == ' SUCCES ' : prepay_id = xmlmsg [ ' xml ' ] [ ' prepay_id ' ] #时间戳 timeStamp = str ( int (time.time ())) # 5 . 五个Liste de paramètres données = { " appId " : self._APP_ID, " nonceStr " : nonce_str, " paquet " : " prepay_id = " + prepay_id, " signType " : ' MD5 ' , " : TimeStamp, } # . 6 . Signature PaySign paySign = self.generate_sign (données) de données [ " paySign " ] = paySign signatures ajoutées # # 7 après les paramètres passés à l'avant d'une signature. Retour de données
Les données générées en réponse à l'applet peut alors appeler le début de wx.requestPayment
Ne pas oublier d'appeler avant l'entreprise associée micro-canal micro-canal à un petit nombre, applets plate-forme publique micro lettre à payer le numéro de marchand associé
documentation de développement microcanal, spécifique sur le terrain signifie aller à l' intérieur pour trouver: https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_1