Exemple #1
0
    def __get_card_request_params__(cls, chargeInfo, mi, mo, cardType):
        if not PayHelper.checkCardParam(mi, mo):
            return None

        orderPrice = int(float(chargeInfo['chargeTotal']))
        card_amount = mi.getParamStr('card_amount', '')
        desKey = base64.decodestring(cls.szf_desKey)
        cardInfo = card_amount + '@' + mi.getParamStr('card_number') + '@' + mi.getParamStr('card_pwd')
        TyContext.ftlog.debug('__get_card_request_params__ cardInfo=', cardInfo)
        #        iv = Random.new().read(DES.block_size)
        desobj = DES.new(desKey, DES.MODE_ECB)
        padlen = 8 - len(cardInfo) % 8
        for i in xrange(padlen):
            cardInfo = cardInfo + chr(padlen)
        cipher = desobj.encrypt(cardInfo)
        cardInfo = base64.b64encode(cipher)
        cls.reqSeq += 1
        orderPlatformId = chargeInfo['platformOrderId']
        ct = datetime.datetime.now()
        orderId = ct.strftime('%Y%m%d') + '-' + cls.szf_merId + '-' + orderPlatformId + str(cls.reqSeq % 10000)
        rparam = {}
        rparam['version'] = 3  # 版本号值为:  3
        rparam['merId'] = cls.szf_merId  # 商户在神州付的唯一身份标识
        rparam['payMoney'] = orderPrice * 100  # 支付金额  单位:分
        rparam['orderId'] = orderId  # 订单号的格式:yyyyMMdd-merId-SN
        rparam['returnUrl'] = PayHelper.getSdkDomain() + cls.szf_callback_url
        rparam[
            'cardInfo'] = cardInfo  # DES 加密并做 BASE64 编码后的数据  DES 加密数据格式:充值卡面额[单位:元]@充值卡序列号 @充值卡密码 (请与神州付技术联系配置密钥,然后登录商户平台查看密钥)
        rparam['merUserName'] = ''  # 支付此订单的用户的用户名
        rparam['merUserMail'] = ''  # 支付此订单的用户的邮箱
        rparam['privateField'] = orderPlatformId  # 可以传任意字母数字组成的字符串,回调的时候会传回给商户
        rparam['verifyType'] = 1  # 固定传1
        rparam['cardTypeCombine'] = cardType  # 0:移动;1:联通;2:电信
        md5String = str(rparam['version']) + str(rparam['merId']) + \
                    str(rparam['payMoney']) + str(rparam['orderId']) + \
                    str(rparam['returnUrl']) + str(rparam['cardInfo']) + \
                    str(rparam['privateField']) + str(rparam['verifyType']) + \
                    cls.szf_privateKey
        m = hashlib.md5()
        m.update(md5String)
        md5String = m.hexdigest()
        rparam['md5String'] = md5String  # MD5 校验串
        TyContext.ftlog.debug('__get_card_request_params__->rparam=', rparam)
        return rparam
Exemple #2
0
 def _get_pay_requset_params(cls, chargeInfo, mi, mo, bankIndex):
     cls.reqSeq += 1
     rparam = {}
     # 如果同一个事务,发送第一次请求,失败,360认为此事务已被占用,必须使用不同的事务ID
     rparam['mer_trade_code'] = chargeInfo['platformOrderId'] + '-' + str(
         cls.reqSeq)
     rparam['rec_amount'] = float(chargeInfo['chargeTotal'])
     rparam['product_name'] = chargeInfo['buttonName']
     rparam['mer_code'] = cls.merchant_code
     rparam['trans_service'] = cls.trans_service
     rparam['input_cha'] = cls.input_cha
     rparam['sign_type'] = cls.sign_type
     rparam['notify_url'] = PayHelper.getSdkDomain() + cls.notify_url
     rparam['return_url'] = cls.no_notify_url
     rparam['bank_code'] = cls.bank_code[bankIndex]
     if bankIndex in (1, 2, 3):
         if not PayHelper.checkCardParam(mi, mo):
             return None
         rparam['card_amount'] = mi.getParamInt('card_amount')
         rparam['card_number'] = mi.getParamStr('card_number')
         rparam['card_pwd'] = mi.getParamStr('card_pwd')
     rparam['sign'] = cls.__build_my_sign__(rparam)
     return rparam