def pay_from_mui(self): inputs = self.getInput() trade_info = {} try: # this will raise an exception if user not found! try: user = Users.get(Users.token == inputs.get('token','illegal_token')) except Exception as e: return self.forbidden() trade_info = self._get_trade_info(inputs, True) trade_no = uuid.uuid4().hex self.__save_trade(trade_no, trade_info["total_fee"], user.id, TransactionStatus.STATUS_NONE) #MOCK user.id == 1 #self.__save_trade(trade_no, 1, TransactionStatus.STATUS_NONE) condition={'tradeID': trade_no} trade = Transactions.get(Transactions.trade_id == trade_no) self._save_trade_relationship(trade.id, trade_info) #print("trade info is %s\n", trade_info) para = [ ("service" , "mobile.securitypay.pay"), ("partner" , self.alipay_config['partner']), ("_input_charset", self.alipay_config['input_charset']), ("out_trade_no", trade_no), ("subject", trade_info["subject"]), ("payment_type", "1"), ("seller_id", self.seller_email), ("total_fee", trade_info["total_fee"]), ("body", trade_info.get("body", "None")), #不能为空,即使是空字符串也不行! TODO ("notify_url", trade_info["notify_url"]), #"show_url": "" ] prestr = "&".join(["%s=\"%s\"" % (key,str(val)) for key,val in para]) sign = urllib.urlencode({"sign":self.__rsa_sign(prestr, self.alipay_config['private_key_path'])}) split_sign = sign.split("=") sign = "=".join(["sign","\"%s\"" % split_sign[1]]) ret="%s&%s&sign_type=\"RSA\"" % (prestr, str(sign)) return ret except Exception as e: return self.error()
def mobilenotify(self): inputs = self.getInput() verify_result = self.__verify_mobile_notify_result(inputs) if(verify_result): out_trade_no = inputs.get("out_trade_no", "") trade_no = inputs.get("trade_no", "") trade_status = inputs.get("trade_status", "") if trade_status == 'TRADE_FINISHED' or trade_status == 'TRADE_SUCCESS' or trade_status == 'WAIT_BUYER_PAY': trade_record = Transactions.get(Transactions.trade_id == out_trade_no) if trade_record: trade_record.alipay_trade_id = trade_no trade_record.last_modified_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") trade_record.description = str(inputs) if trade_status == 'WAIT_BUYER_PAY': trade_record.trade_status = TransactionStatus.STATUS_WAITPAY else: trade_record.trade_status = TransactionStatus.STATUS_COMPLETE trade_record.save() else: print('[IN MOBILE Notify]交易号%s不存在'%out_trade_no) else: print('[IN MOBILE Notify]交易信息非法:%s' % trade_status) else: print('[IN MOBILLE Notify]Verify失败:%s' % inputs)