def __check_ras_code__(cls, hwapps, rparam, issign): TyContext.ftlog.debug('__check_ras_code__->', rparam, issign, hwapps) sk = rparam.keys() sk.sort() ret = "" sign = '' for k in sk: if k == 'sign': sign = rparam[k] else: v = rparam[k] if isinstance(v, unicode): v = v.encode('utf-8') else: v = str(v) TyContext.ftlog.debug('k====>', k, 'v====>', v, 'ret==>', ret) ret = ret + str(k) + '=' + v + '&' sigdata = ret[:-1] if issign: private_key = hwapps.get('_pay_ras_privat_key_', None) if not private_key: private_key = _import_rsa_key_(hwapps['pay_ras_privat_key']) hwapps['_pay_ras_privat_key_'] = private_key TyContext.ftlog.debug('__check_ras_code__ sign code ', sign, sigdata, private_key) b = _sign_with_privatekey_pycrypto(sigdata, private_key) return b else: public_key = hwapps.get('_pay_ras_pub_key_', None) if not public_key: public_key = _import_rsa_key_(hwapps['pay_ras_pub_key']) hwapps['_pay_ras_pub_key_'] = public_key TyContext.ftlog.debug('__check_ras_code__ verify ', sign, sigdata, public_key) isOk = _verify_with_publickey_pycrypto(sigdata, sign, public_key) return isOk
def doiToolsPayCallback(self, rpath): postData = TyContext.RunHttp.get_body_content() TyContext.ftlog.debug('TuYouPayiTools->doiToolsPayCallback postData: ', postData) paramslist = postData.split('&') params = {} for k in paramslist: paramdata = k.split('=') params[paramdata[0]] = paramdata[1] TyContext.ftlog.debug( 'TuYouPayiTools->doiToolsPayCallback postParams: ', params) for k in params.keys(): params[k] = urllib.unquote(params[k]) TyContext.ftlog.debug( 'TuYouPayiTools->doiToolsPayCallback postParams_urldecode: ', params) pristr = params['notify_data'] sign = params['sign'] data = rsa_decrypto_with_publickey(pristr, iTools_pubkey_str, 1) TyContext.ftlog.debug( 'TuYouPayiTools->doiToolsPayCallback iTools callback data: ', data) rparam = json.loads(data) TyContext.ftlog.debug( 'TuYouPayiTools->doiToolsPayCallback notify_data: ', rparam) try: orderPlatformId = rparam['order_id_com'] amount = rparam['amount'] account = rparam['account'] third_orderid = rparam['order_id'] result = rparam['result'] user_id = rparam['user_id'] except: TyContext.ftlog.error( 'TuYouPayiTools->doiToolsPayCallback Get params in iTools callback ERROR!' ) return 'fail' if 0 != cmp('success', result): TyContext.ftlog.error( 'TuYouPayiTools->doiToolsPayCallback Charge failed!') errormsg = 'user use ' + account + ' charge ' + result PayHelperV4.callback_error(orderPlatformId, errormsg, rparam) # veriry_result = cls.rsa_verify(data, sign, iTools_pubkey_str) veriry_result = _verify_with_publickey_pycrypto( data, sign, _iTools_pubkey_py) if not veriry_result: TyContext.ftlog.error( 'TuYouPayiTools->doiToolsPayCallback Verify failed! data: %s, sign: %s, iTools_pubkey_str: %s' % (data, sign, iTools_pubkey_str)) return 'fail' rparam['third_orderid'] = third_orderid PayHelperV4.callback_ok(orderPlatformId, amount, rparam) TyContext.ftlog.debug( 'TuYouPayiTools->doiToolsPayCallback user %s charge % successed! ' % (user_id, amount)) return 'success'
def rsaVerify(cls, data, **kwargs): sign = kwargs['sign'] partnerId = kwargs.get('partner_id', "") sellerId = kwargs.get('seller_id', "") partnerParam = cls.getPartnerParam(partnerId=partnerId, sellerId=sellerId) from Crypto.PublicKey import RSA public_key = RSA.importKey(partnerParam['rsaPubKey']) return _verify_with_publickey_pycrypto(data, sign, public_key)
def _check_ras_code(cls, public_key, rparam): TyContext.ftlog.debug('_check_ras_code->', rparam) sign = rparam['tt_sign'] sigdata = "&".join(k + "=" + str(rparam[k]) for k in sorted(rparam.keys()) \ if k != 'tt_sign' and k != 'tt_sign_type') TyContext.ftlog.debug('__check_ras_code__ verify ', sign, sigdata, public_key) return _verify_with_publickey_pycrypto(sigdata, sign, public_key)
def doKuaiYongPingGuoPayCallback(cls, rpath): rparam = TyContext.RunHttp.convertArgsToDict() TyContext.ftlog.debug('TuYouPayKuaiYongPingGuo->doKuaiYongPingGuoPayCallback rparam', rparam) ''' uid = rparam['uid'] subject = rparam['subject'] version = rparam['version'] ''' thirdId = rparam['orderid'] platformOrderId = rparam['dealseq'] encryptData = rparam['notify_data'] sign = rparam['sign'] verifySign = ''.join([k + '=' + str(rparam[k]) + '&' for k in sorted(rparam.keys()) if k != 'sign']) verifySign = verifySign[0:-1] TyContext.ftlog.debug('TuYouPayKuaiYongPingGuo->doKuaiYongPingGuoPayCallback verifySign', verifySign) # 公钥验签 if not _verify_with_publickey_pycrypto(verifySign, sign, _kuaiyongpingguo_pubkey_py): TyContext.ftlog.error('TuYouPayKuaiYongPingGuo->doKuaiYongPingGuoPayCallback public verify fail') return 'failed' # 公钥解密:加载.so文件,python嵌入动态库 decryptData = rsa_decrypto_with_publickey(encryptData, KUAIYONGPINGGUO_PUB_KEY, 1) TyContext.ftlog.debug('TuYouPayKuaiYongPingGuo->doKuaiYongPingGuoPayCallback decryptData', decryptData) # 将dealseq=20130219160809567&fee=0 .01&payresult=0转化为dict结构. responseStatus = {} attr = decryptData.split('&') for param in attr: params = param.split('=') responseStatus[params[0]] = params[1] TyContext.ftlog.debug('TuYouPayKuaiYongPingGuo->doKuaiYongPingGuoPayCallback responseStatus', responseStatus) rparam['third_orderid'] = thirdId rparam['chargeType'] = 'kuaiyongpingguo' if 0 == int(responseStatus['payresult']): total_fee = int(float(responseStatus['fee'])) chargeKey = 'sdk.charge:' + platformOrderId chargeInfo = TyContext.RedisPayData.execute('HGET', chargeKey, 'charge') chargeInfo = json.loads(chargeInfo) # 当返回的fee和商品定价不一致时,采用商品本身的价格 TyContext.ftlog.debug('TuYouPayKuaiYongPingGuo->doKuaiYongPingGuoPayCallback chargeInfo', chargeInfo, chargeInfo['chargeTotal'], total_fee) # if chargeInfo['chargeTotal'] != total_fee: # total_fee = chargeInfo['chargeTotal'] PayHelper.callback_ok(platformOrderId, total_fee, rparam) return 'success' else: errinfo = '支付失败' PayHelper.callback_error(platformOrderId, errinfo, rparam) return 'failed'
def _check_sign(cls, rparam): sigdata = "&".join(k + "=" + str(rparam[k]) for k in sorted(rparam.keys()) \ if k != 'sign') si = unquote(rparam['sign']) TyContext.ftlog.info('doJinliCallback ,param err,exception si', si) appkeyconfig = TyContext.Configure.get_global_item_json( 'jinli_config', {}) if 'api_key' in rparam and appkeyconfig: for item in appkeyconfig: if 0 == cmp(rparam['api_key'], item['appKey']): jinli_pubkey_py = RSA.importKey(item['publicKey']) break else: jinli_pubkey_py = _jinli_pubkey_py return _verify_with_publickey_pycrypto(sigdata, si, jinli_pubkey_py)
def _check_sign(self, rparam): sigdata = "&".join(k + "=" + str(rparam[k]) for k in sorted(rparam.keys()) \ if k != 'sign') si = unquote(rparam['sign']) TyContext.ftlog.info('doJinliCallback ,param err,exception si', si) platformOrderId = rparam['out_order_no'] chargeInfo = self.load_order_charge_info(platformOrderId) appId = chargeInfo['appId'] packageName = chargeInfo['packageName'] changeName = chargeInfo['channelName'] config = GameItemConfigure(appId).get_sdk_configure( changeName, packageName, 'jinli') jinli_publicKey = config['jinli_publicKey'] return _verify_with_publickey_pycrypto( sigdata, si, self.loadRsaPublicKey(jinli_publicKey))
def _check_sign(self, rparam): sigdata = "&".join(k + "=" + str(rparam[k]) for k in sorted(rparam.keys()) \ if k != 'sign') si = unquote(rparam['sign']) TyContext.ftlog.info('doJinliCallback ,param err,exception si', si) appkeyconfig = TyContext.Configure.get_global_item_json( 'jinli_config', {}) jinli_pubkey_py = "" if 'api_key' in rparam and appkeyconfig: for item in appkeyconfig: if 0 == cmp(rparam['api_key'], item['appKey']): jinli_pubkey_py = RSA.importKey(item['publicKey']) break if not jinli_pubkey_py: config = GameItemConfigure.get_game_channel_configure_by_orderId( rparam['out_order_no']) TyContext.ftlog.debug('jinli getsdkconfig -->', config) jinli_pubkey_py = config.get('jinli_publicKey', "") if jinli_pubkey_py: jinli_pubkey_py = self.loadRsaPublicKey(jinli_pubkey_py) jinli_pubkey_py = RSA.importKey(jinli_pubkey_py) else: jinli_pubkey_py = _jinli_pubkey_py return _verify_with_publickey_pycrypto(sigdata, si, jinli_pubkey_py)
def verifySign(self, transdata, sign, appKey): privateKey = self.loadRsaPrivateKey(appKey) return _verify_with_publickey_pycrypto(transdata, sign, privateKey)
def rsaVerify(cls, data, sign, pubkey): pubkey = cls.loadRsaPublicKey(pubkey) from Crypto.PublicKey import RSA public_key = RSA.importKey(pubkey) return _verify_with_publickey_pycrypto(data, sign, public_key)