Commit b4715d90 by 陶然

实现结算调用扫码支付功能

parent 34f99068
...@@ -11,6 +11,8 @@ namespace Com.Bocom.OpenApi ...@@ -11,6 +11,8 @@ namespace Com.Bocom.OpenApi
internal static string APIGW_URL_ADDRESS = "https://open.test.bankcomm.com:9443/uat";//"https://117.184.192.242:9443"; internal static string APIGW_URL_ADDRESS = "https://open.test.bankcomm.com:9443/uat";//"https://117.184.192.242:9443";
internal static string QR_CODE_APIGW_URL_ADDRESS = "https://open.test.bankcomm.com:9443";//"https://117.184.192.242:9443"; internal static string QR_CODE_APIGW_URL_ADDRESS = "https://open.test.bankcomm.com:9443";//"https://117.184.192.242:9443";
public const string TableNameReceiveCode = "BCOM_ReceiveCodes"; public const string TableNameReceiveCode = "BCOM_ReceiveCodes";
public const string TableNameWriteOffResultNotify = "BCOM_WriteOffResultNotifys";
public const string TableNameReceiveCodeDetail = "BCOM_ReceiveCodeDetails";
/// <summary> /// <summary>
/// APP_ID:通过内管查看详情,可获取对应的组织机构、接入方式、公钥等信息;APP管理中查看 /// APP_ID:通过内管查看详情,可获取对应的组织机构、接入方式、公钥等信息;APP管理中查看
......
...@@ -38,7 +38,7 @@ namespace Njzj.Bocoms.Openapis.Entities ...@@ -38,7 +38,7 @@ namespace Njzj.Bocoms.Openapis.Entities
public string shop_id { get; set; } public string shop_id { get; set; }
[ApiMember(Description = "商户交易编号")] [ApiMember(Description = "商户交易编号")]
[Unique] [Unique,IgnoreUpdate]
[StringLength(200)] [StringLength(200)]
public string pay_mer_tran_no { get; set; } public string pay_mer_tran_no { get; set; }
...@@ -82,4 +82,34 @@ namespace Njzj.Bocoms.Openapis.Entities ...@@ -82,4 +82,34 @@ namespace Njzj.Bocoms.Openapis.Entities
public string tran_content { get; set; } public string tran_content { get; set; }
} }
[Api(Description = "收款码明细")]
[Alias(Configs.TableNameReceiveCodeDetail)]
public class ReceiveCodeDetail : EntityWithMetadata
{
[DefaultEmptyGuid]
public Guid ReceiveCodeKvid { get; set; }
[ApiMember(Description = "商户交易编号")]
[StringLength(200)]
public string PayMerTranNo { get; set; }
[ApiMember(Description = "付款单位")]
[StringLength(500)]
public string PayerName { get; set; }
[IgnoreUpdate]
[DefaultEmptyGuid]
public Guid BizKvid { get; set; }
[ApiMember(Description = "业务流水号")]
[IgnoreUpdate]
[StringLength(200)]
public string BizId { get; set; }
[ApiMember(Description = "业务类型")]
[IgnoreUpdate]
[StringLength(100)]
public string BizType { get; set; }
}
} }
...@@ -200,24 +200,17 @@ namespace Com.Bocom.OpenApi ...@@ -200,24 +200,17 @@ namespace Com.Bocom.OpenApi
var amount = settlements.Sum(o => o.Amount); var amount = settlements.Sum(o => o.Amount);
if (amount <= 0) return null; if (amount <= 0) return null;
var uniqueCode = Guid.NewGuid().ToString();//生成二维码的唯一性交易编号 var uniqueCode = Guid.NewGuid().ToString();//生成二维码的唯一性交易编号
var bizIds = settlements.ConvertAll(o => o.BizId).Join("、"); var summary = $"{settlements[0].BizId}等共{settlements.Count}条结算进行扫码支付!";
var remark = settlements.ConvertAll(o => o.BizId).Join("、"); var remark = settlements[0].PayerName;
//var rtnTests = new MPNG210001ResponseV1();
if (bizIds.Length > 200) bizIds = bizIds.Substring(0, 200);//根据对接要求长度限制长度 //rtnTests.rsp_body = new MPNG210001ResponseV1.RspBody();
if (remark.Length > 500) remark = remark.Substring(0, 500);//根据对接要求长度限制长度 //rtnTests.SetBizState("S");
//rtnTests.SetRspCode("1");
var rtnTests = new MPNG210001ResponseV1(); //rtnTests.SetRspMsg("1");
rtnTests.rsp_body = new MPNG210001ResponseV1.RspBody(); //rtnTests.rsp_body.display_code_text = "http://yunbanktest.bankcomm.com/tcipp/pmss/cipp.jsp?qrCode=https://qr.95516.com/03010000/kl6im4od20200804123754";
rtnTests.SetBizState("S"); //rtnTests.rsp_body.pay_mer_tran_no = uniqueCode;
rtnTests.SetRspCode("1");
rtnTests.SetRspMsg("1"); //return rtnTests;
rtnTests.rsp_body.display_code_text = "http://yunbanktest.bankcomm.com/tcipp/pmss/cipp.jsp?qrCode=https://qr.95516.com/03010000/kl6im4od20200804123754";
rtnTests.rsp_body.pay_mer_tran_no = uniqueCode;
return rtnTests;
DefaultBocomClient client = new DefaultBocomClient(Configs.QR_CODE_APP_ID, Configs.QR_CODE_MY_PRIVATE_KEY, Configs.QR_CODE_APIGW_PUBLIC_KEY, BocomConstants.ENCRYPT_TYPE_RSA_AND_AES); DefaultBocomClient client = new DefaultBocomClient(Configs.QR_CODE_APP_ID, Configs.QR_CODE_MY_PRIVATE_KEY, Configs.QR_CODE_APIGW_PUBLIC_KEY, BocomConstants.ENCRYPT_TYPE_RSA_AND_AES);
/** /**
* 测试环境可以忽略SSL证书告警,生产环境不可忽略 * 测试环境可以忽略SSL证书告警,生产环境不可忽略
...@@ -239,7 +232,7 @@ namespace Com.Bocom.OpenApi ...@@ -239,7 +232,7 @@ namespace Com.Bocom.OpenApi
bizContent.req_body.total_amount = amount.ToString(); bizContent.req_body.total_amount = amount.ToString();
bizContent.req_body.location = "ONLINE"; bizContent.req_body.location = "ONLINE";
bizContent.req_body.currency = "CNY"; bizContent.req_body.currency = "CNY";
bizContent.req_body.tran_content = bizIds; bizContent.req_body.tran_content = summary;
bizContent.req_body.mer_memo = remark; bizContent.req_body.mer_memo = remark;
request.SetBizContent(bizContent); request.SetBizContent(bizContent);
var response = client.Execute(request, uniqueCode.Replace("-", "")); var response = client.Execute(request, uniqueCode.Replace("-", ""));
...@@ -248,6 +241,7 @@ namespace Com.Bocom.OpenApi ...@@ -248,6 +241,7 @@ namespace Com.Bocom.OpenApi
{ {
//-----------------------记录下这份收款码的数据的信息,如果这份订单取消了就要作废-------------------------------- //-----------------------记录下这份收款码的数据的信息,如果这份订单取消了就要作废--------------------------------
var rtns = response as MPNG210001ResponseV1; var rtns = response as MPNG210001ResponseV1;
//rtns.rsp_body.display_code_text = $"http://yunbanktest.bankcomm.com/tcipp/pmss/cipp.jsp?qrCode={rtns.rsp_body.display_code_text}";
return rtns; return rtns;
} }
else else
...@@ -256,31 +250,9 @@ namespace Com.Bocom.OpenApi ...@@ -256,31 +250,9 @@ namespace Com.Bocom.OpenApi
} }
} }
public static MPNG020702ResponseV1 GetReceiveCodeOrder(string payMerTranNo,List<Settlement> settlements) public static MPNG020702ResponseV1 GetReceiveCodeOrder(string payMerTranNo)
{ {
payMerTranNo.ThrowIfNullOrEmpty("缺少订单号信息"); payMerTranNo.ThrowIfNullOrEmpty("缺少订单号信息");
if (settlements.IsNullOrEmpty()) return null;
if (settlements.Exists(o => o.OffsetKvid != Guid.Empty || o.AmountPayment > 0)) throw new Exception("存在不符合生成收款码条件的结算");
var amount = settlements.Sum(o => o.Amount);
if (amount <= 0) return null;
var uniqueCode = Guid.NewGuid().ToString();//生成二维码的唯一性交易编号
var bizIds = settlements.ConvertAll(o => o.BizId).Join("、");
var remark = settlements.ConvertAll(o => o.BizId).Join("、");
if (bizIds.Length > 200) bizIds = bizIds.Substring(0, 200);//根据对接要求长度限制长度
if (remark.Length > 500) remark = remark.Substring(0, 500);//根据对接要求长度限制长度
var rtnTests = new MPNG020702ResponseV1();
rtnTests.SetBizState("S");
rtnTests.SetRspCode("1");
rtnTests.SetRspMsg("1");
rtnTests.rsp_body = new MPNG020702ResponseV1.RspBody();
rtnTests.rsp_body.mer_memo = remark;
rtnTests.rsp_body.total_amount = amount.ToString();
rtnTests.rsp_body.tran_content = bizIds;
return rtnTests;
DefaultBocomClient client = new DefaultBocomClient(Configs.QR_CODE_APP_ID, Configs.QR_CODE_MY_PRIVATE_KEY, Configs.QR_CODE_APIGW_PUBLIC_KEY, BocomConstants.ENCRYPT_TYPE_RSA_AND_AES); DefaultBocomClient client = new DefaultBocomClient(Configs.QR_CODE_APP_ID, Configs.QR_CODE_MY_PRIVATE_KEY, Configs.QR_CODE_APIGW_PUBLIC_KEY, BocomConstants.ENCRYPT_TYPE_RSA_AND_AES);
/** /**
* 测试环境可以忽略SSL证书告警,生产环境不可忽略 * 测试环境可以忽略SSL证书告警,生产环境不可忽略
......
...@@ -31,29 +31,58 @@ namespace Njzj.Bocoms.Openapis ...@@ -31,29 +31,58 @@ namespace Njzj.Bocoms.Openapis
var results = Extension.GenerateReceiveCode(settlements); var results = Extension.GenerateReceiveCode(settlements);
var payMerTranNo = results.rsp_body.pay_mer_tran_no; var payMerTranNo = results.rsp_body.pay_mer_tran_no;
var order = Extension.GetReceiveCodeOrder(payMerTranNo, settlements); var order = Extension.GetReceiveCodeOrder(payMerTranNo);
order.pay_mer_tran_no = payMerTranNo; order.pay_mer_tran_no = payMerTranNo;
order.display_code_text = results.rsp_body.display_code_text; order.display_code_text = results.rsp_body.display_code_text;
var connB = KiviiContext.GetOpenedDbConnection<ReceiveCode>(); var connB = KiviiContext.GetOpenedDbConnection<ReceiveCode>();
var item = new ReceiveCode(); var codeKvid = Guid.NewGuid();
item.trans_code = results.rsp_head.trans_code; var code = new ReceiveCode();
item.response_code = results.rsp_head.response_code; code.Kvid = codeKvid;
item.response_status= results.rsp_head.response_status; code.trans_code = results.rsp_head.trans_code;
item.response_time= results.rsp_head.response_time; code.response_code = results.rsp_head.response_code;
item.response_msg= results.rsp_head.response_msg; code.response_status = results.rsp_head.response_status;
item.shop_id = results.rsp_body.shop_id; code.response_time = results.rsp_head.response_time;
item.pay_mer_tran_no= payMerTranNo; code.response_msg = results.rsp_head.response_msg;
item.display_code_text = results.rsp_body.display_code_text; code.shop_id = results.rsp_body.shop_id;
code.pay_mer_tran_no = payMerTranNo;
code.display_code_text = results.rsp_body.display_code_text;
item.tran_state = order.rsp_body.tran_state; code.tran_state = order.rsp_body.tran_state;
item.tran_state_code = order.rsp_body.tran_state_code; code.tran_state_code = order.rsp_body.tran_state_code;
item.tran_state_msg = order.rsp_body.tran_state_msg; code.tran_state_msg = order.rsp_body.tran_state_msg;
item.mer_memo= order.rsp_body.mer_memo; code.mer_memo = order.rsp_body.mer_memo;
item.total_amount= order.rsp_body.total_amount; code.total_amount = order.rsp_body.total_amount;
item.order_status= order.rsp_body.order_status; code.order_status = order.rsp_body.order_status;
item.tran_content= order.rsp_body.tran_content; code.tran_content = order.rsp_body.tran_content;
List<ReceiveCodeDetail> codeDetails = new List<ReceiveCodeDetail>();
foreach (var item in settlements)
{
var detail = new ReceiveCodeDetail();
detail.PayMerTranNo = payMerTranNo;
detail.ReceiveCodeKvid = code.Kvid;
detail.PayerName = item.PayerName;
detail.BizId = item.BizId;
detail.BizType = item.BizType;
detail.BizKvid = item.Kvid;
codeDetails.Add(detail);
}
var trans = connB.OpenTransaction();
try
{
foreach (var item in codeDetails)
{
connB.Insert(item); connB.Insert(item);
}
connB.Insert(code);
trans.Commit();
}
catch (Exception ex)
{
trans.Rollback();
throw ex;
}
if (View.IsNullOrEmpty()) if (View.IsNullOrEmpty())
{ {
...@@ -75,4 +104,50 @@ namespace Njzj.Bocoms.Openapis ...@@ -75,4 +104,50 @@ namespace Njzj.Bocoms.Openapis
} }
} }
} }
public class ReceiveCodeCheckState : RestfulExecution<ReceiveCode>
{
public string PayMerTranNo { get; set; }
public override object OnExecution(IRequest req, IResponse res)
{
PayMerTranNo.ThrowIfNullOrEmpty("请传入订单号!");
var conn = KiviiContext.GetOpenedDbConnection<ReceiveCode>();
var existCode = conn.Single<ReceiveCode>(o => o.pay_mer_tran_no == PayMerTranNo);
if (existCode == null) throw new Exception("未找到此扫码订单");
var rtns = new RestfulExecutionResponse<ReceiveCode>();
rtns.Results = new List<ReceiveCode>();
if (existCode.tran_state != "PROCESS")
{
rtns.Results.Add(existCode);
return rtns;
}
var order = Extension.GetReceiveCodeOrder(PayMerTranNo);
if (order.rsp_body.tran_state != existCode.tran_state)
{
existCode.tran_state = order.rsp_body.tran_state;
existCode.AddOnlyProperties(o => o.tran_state);
existCode.tran_state_code = order.rsp_body.tran_state_code;
existCode.AddOnlyProperties(o => o.tran_state_code);
existCode.tran_state_msg = order.rsp_body.tran_state_msg;
existCode.AddOnlyProperties(o => o.tran_state_msg);
existCode.mer_memo = order.rsp_body.mer_memo;
existCode.AddOnlyProperties(o => o.mer_memo);
existCode.total_amount = order.rsp_body.total_amount;
existCode.AddOnlyProperties(o => o.total_amount);
existCode.order_status = order.rsp_body.order_status;
existCode.AddOnlyProperties(o => o.order_status);
existCode.tran_content = order.rsp_body.tran_content;
existCode.AddOnlyProperties(o => o.tran_content);
conn.UpdateOnly(existCode);
existCode.RemoveAllOnlyProperties();
rtns.Results.Add(existCode);
}
return rtns;
}
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment