def doCallback(self, rpath): rparams = TyContext.RunHttp.convertArgsToDict() order_id = rparams['dealseq'] TyContext.ftlog.debug('TuYouPayJusdkV4->doCallback,rparams=', rparams) if not self.verify_sign(rparams): return 'failed' notify_data = rparams['notify_data'] data = rsa_decrypto_with_publickey(notify_data, JUSDK_PUB_KEY, 1) TyContext.ftlog.debug('TuYouPayJusdkV4 -> de rsa notify data = ', data) notify_dict = dict((l.split('=') for l in data.split('&'))) if notify_dict.get('dealseq') != rparams.get('dealseq'): TyContext.ftlog.debug('TuYouPayJusdkV4 -> dealseq Different') return 'failed' if int(notify_dict.get('payresult')) != 0: TyContext.ftlog.debug('TuYouPayJusdkV4 -> payresult Different') return 'failed' is_ok = PayHelperV4.callback_ok(order_id, -1, rparams) if is_ok: return 'success' else: TyContext.ftlog.debug('TuYouPayJusdkV4 -> not ok') return 'failed'
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 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 VerifySign(cls, pristr, params): try: pristr = "".join(pristr.split()) TyContext.ftlog.debug('TuYouPayAiSi->VerifySign Before decrypt: ', pristr) data = rsa_decrypto_with_publickey(pristr, aisi_pubkey_str, 1) TyContext.ftlog.debug('TuYouPayAiSi->VerifySign After decrypt: ', data) priParam = {} for item in data.split('&'): tmplist = item.split('=') priParam[tmplist[0]] = tmplist[1] TyContext.ftlog.debug('TuYouPayAiSi->VerifySign priParam is: ', priParam) for item in params: if item == 'sign': continue if params[item] != priParam[item]: return False except Exception as e: TyContext.ftlog.error('TuYouPayAiSi->VerifySign Error: ', e) return False return True