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
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