general_pay_trans_flowchart
2016-03-20 22:34:34 0 举报
general_pay_trans_flowchart是一个流程图,用于说明一般的支付交易流程。该流程包括以下步骤: 1. 用户发起支付请求; 2. 系统验证用户的账户余额和支付信息; 3. 系统从用户账户中扣除相应的金额; 4. 系统向商家发送支付通知; 5. 商家确认收到支付通知并发货或提供服务; 6. 系统更新用户账户余额。 这个流程图可以帮助人们更好地理解一般的支付交易过程,从而更好地使用相关服务。
作者其他创作
大纲/内容
fee_type fee_settlement_type has_pay_mode 必须同时存在或者同时不存在
遍历传入的up_merchants对于每一个item,遍历solution去寻找,找不到报错找到了,如果是up2即最上层商户,从对应的solution item记录最上级商户fee_plus_amount钱包收取手续费即最上级商户的fee_amount找到了,如果是up1中间级商户,从对应的solution item记录中间商户的fee_amout将每个uid放入merchant_user
交易的结算要在手续费结算之前否则可能商户账号上没钱扣手续费(info.settlement_type info.fee_settlement_type)
根据入参info.trans_id从数据库加载交易单t_trans放入info
if (cash_amount != info.cash_amount)
has_buyer_fee_amount如果传入了买家手续费
如果传入,用传入值改变库中值:channel_idsettlement_typefee_amountfee_account.user_id
Y
能出现实时结算但是后收的情况 这种情况在业务上不合理也不存在需要控制一下
info.buyer_fee_account.user_id = input_buyer_fee_user_id;info.buyer_fee_account.sub_account_type = info.buyer_fee_account.SUB_ACCOUNT_TYPE_DEFAULT;info.buyer_fee_account.currency = info.buyer.currency;收益账户不能跟卖家相同收益账户不能跟买家相同收益账户必须是C账户收益账户必须存在
check_trans_solution_account
inner_check_trans_solution_account遍历solution里面所有solution_item,取出user_id案中的账户不能是卖家或者买家案中的账户必须存在且状态正常方案中的账户必须存在
如果有2级商户,则最上级商户fee_plus_amount等于中间商户的fee_amout如果只有1级商户,则最上级商户fee_plus_amount应该为0
是否有营销支付方案has_mkt_solution
if (input_buyer_fee_amount 0)
N
交易入参与库中交易单数据一致优惠信息必须与交易一致优惠支付方案必须与交易一致优惠方案钱数与优惠券钱数必须一致
credit_recv._credit_recv_id_initialized
recv._recvable_id_initialized 如果提供了收款单,就要检查收款单是否已支付并且包含这个交易的信息并且对金额也要做检查,支付成功之后需要修改相应已支付金额,所以需要锁表
库中payment_mode必须与模板中payment_mode一致
声明本地变量trans_info infotrans_info merchant_transtrans_solution_t pay_trans_solutiontrans_solution_t share_profit_solutiontrans_solution_t billing_solution_inforecvable_info recvCreditRecvableInfo credit_recvmkt_solution_t ac_solutionup_merchant_info merchant_info
有钱逻辑一坨
开启事务
遍历solution_user都要在merchant_user里面
商户分账金额不能大于商户所得金额
读取入参info.trans_idrecv_recvable_idcash_amountneed_share_profitinfo.client_source_flaginfo.mkt_solution_idac_solutioninfo.is_profit_flaginfo.is_recv_confirm_flaginfo.is_refund_fee_amount_flaginfo.fee_amount_payer_flaginput_channel_idinput_fee_amountinput_fee_user_idinput_settlement_typeinput_buyer_fee_amountinput_buyer_fee_user_idbilling_solution_infocredit_recv._credit_recv_id设置_recvable_id_initializedhas_buyer_fee_amounthas_billing_solution_info_credit_recv_id_initializedhas_input_channel_idhas_input_fee_amounthas_mkt_solution_idhas_mkt_solutionread_client_source_flag_okhas_special_code
如果传入了分账方案has_billing_solution_info
info.buyer_fee_flag = trans_info::BUYER_FEE_FLAG_INCLUDE;info.buyer_fee_amount = input_buyer_fee_amount;
有营销方案且交易单为初始状态has_mkt_solution && info.TRANS_STATE_CREATED == info.state
pay_trans接口中这些信息只是为了向支付方式结算信息表中插入记录 并不用于记账info.mkt_solution_flag = trans_info::MKT_SOLUTION_FLAG_INCLUDE;info.mkt_solution_amount = ac_solution().get_total_amount();info._mkt_total_no_settlement_amount = ac_solution().get_total_no_settlement_amount();
if ((recv.RECVABLE_TYPE_FULL_DEPOSIT_PAY != recv.recv_type) && (recv.RECVABLE_TYPE_PARTIAL_DEPOSIT_PAY != recv.recv_type))
merchant_user和solution_user的size必须相等且都不大于2
recv.RECVABLE_STATE_PAID != recv.state
!recv.account.same_account(info.buyer)收款单账户必须与买家相同
从入参读取组合支付方式pay_mode_var设置has_pay_mode
0 != info.fee_amount
check_merchants_in_entrust_solution
从入参获取fee_settlement_type手续费结算类型,异步还是实时如果没传,默认使用交易的结算类型设置has_fee_settlement_type
如果有支付方案,则加载支付方案has_pay_trans_solution = info.PARALLEL_TYPE_MULTIPLE_IN_MASK & info.parallel_type;
如果有2级商户,则钱包收取的手续费=最上级商户的fee_amount如果只有1级商户,则钱包收取的手续费=中间商户的fee_amout
如果传入了支付信息has_pay_mode
从入参获取fee_type收取手续费类型1坐扣2后收不传默认坐扣设置has_fee_type
根据settlement_type决定info.seller.sub_account_type实时用1,异步用3
手续费不能大于交易总现金金额收益账户不能跟卖家相同收益账户必须是C账户,这是财务要求的收益账户必须存在设置info.fee_account.sub_account_type
在pay_trans接口区分是否含有pay_mode信息info.pay_mode_flag = trans_info::PAY_MODE_FLAG_INCLUDE;
0 条评论
下一页