Exemplo n.º 1
0
    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()
Exemplo n.º 2
0
 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)