## 结汇 `CNH`结算成`CNY` [结汇是什么意思?](./结汇概念.md) ### 流程 #### 流程图 ![](./../结汇流程图.png) ### 1. 发起结汇 > 商户从前端选择 系统账户(币种CNH)发起结汇, ```js // 提交结汇的账户 ,金额,等 http.post("",{ amount:10000.00, //currencyID:88, // 币种 CNY paymentChannel:"CNH", //"alipay" unionpay fromAccountID:"66688", //来自到的账户 toAccountID:"2332", //转到的账户 TradeType:"settlement" }) ```

### 2. 收款系统生成结汇订单号 ,记录到交易日志 ### 3. 关联操作的账户 ```go orderSN:="charge".util.PayTool.GenOrderSn() //生成结汇单号 settlement202204221059590001 order := &entity.PaymentOoder{ MerchantID:mid, FromCurrencyID:CurrencyID, // 币种 ToCurrencyID:22325222 ,//转到的账户 Amount:1000.00 , //金额 FromAccountID:22325222 ,//来自到的账户 ToAccountID:22325222 ,//转到的账户 OrderSN:orderSN, TradeType:"settlement", //交易类型 结汇 TradeOrg:"settlement", //交易 机构指银行 OrderSN:orderSN, // ...... } accountID,err:=repo.PaymentOrderDao.Save(order) //保存订单 //日志 payLog:=&entity.PaymentOoderLog{ OrderSN:orderSN, StepR:0 , //步骤 StepName:"order_create", //步骤 init TradeType:"settlement", //交易类型 结汇 notify_msg:"" //回调信息 } err:=repo.PaymentOrderLogDao.Save(payLog) //保存订单日志 ```

### 4. 向银行机构发起结汇请求 略 ##### 4.1 查询实时汇率等,渠道,币种; ##### 4.2 包装请求体,向银行发起结汇请求 ##### 4.3 记录请求数据及响应数据

### 5. 收到银行机构结汇成功的通知 ##### 5.1 解析通知body, 查询订单,验证签名,回应银行机构 success ##### 5.2 更改订单状态,记录银行通知数据、订单状态等到日志

### 6.结汇成功,更改目标账户金额 ##### 6.1 查询订单信息,获取商户外部账户信息(CNY币种),订单金额等 ##### 6.2 更改外部账户金额、记录订单状态等到`MerchantAccountOutLog`日志 ##### 6.3 记录订单状态等到`PaymentOrderLog`日志