PB调用C#动态库实现新大陆星POS扫码支付接口。
实例下载地址:https://download.csdn.net/download/weixin_41317666/12418679
string ls_url
string ls_data
string ls_dd
string ls_zfqd
//【交易类型--传入平台用】
if rb_1.checked = true then
ls_zfqd = "WXPAY"
end if
if rb_2.checked = true then
ls_zfqd = "ALIPAY"
end if
if rb_3.checked = true then
ls_zfqd = "YLPAY"
end if
//【生成请求地址===从配置参数中维护请求地址的一部分】
ls_url = gs_pos_requesturl + "sdkBarcodePay.json"
//【判断输入金额是否符合要求】
if dec(em_1.text) <= 0.00 then
messagebox("系统提示【MYSOFT】","所输金额不正确!~r~n请重新输入!")
em_1.setfocus()
return
end if
//【判断商户订单号是否为空】
if sle_4.text = "" then
messagebox("系统提示【MYSOFT】","订单号不能为空!")
return
end if
//【判断是否扫描付款码】
if sle_code.text = "" then
messagebox("系统提示【MYSOFT】","付款码不能为空!")
sle_code.setfocus()
return
end if
//【判断是否扫描付款码】
if len(sle_code.text) = 0 then
messagebox("系统提示【MYSOFT】","请扫描服务对象付款码... ...")
sle_code.setfocus()
return -1
end if
//【判断订单号是否为空】
if len(sle_4.text) = 0 then
messagebox("系统提示【MYSOFT】","订单号不能为空!")
sle_4.setfocus()
return -1
end if
//【初始化伪随机数发生器,让应用程序每次运用不同的伪随机数序列。】
randomize(0)
//【清除is_keys[] is_value[]】
inv_wxpay.of_clear()
//====================生成公共请求参数==============================================================
//【操作系统:3-直连】
inv_wxpay.of_add_pos("opSys","3")
//【字符集:00-GBK】
inv_wxpay.of_add_pos("characterSet","00")
//【机构号,从配置参数维护】
inv_wxpay.of_add_pos("orgNo",gs_pos_orgno)
//【商户号,从配置参数维护】
inv_wxpay.of_add_pos("mercId",gs_pos_mercid)
//【设备号,从配置参数维护】
inv_wxpay.of_add_pos("trmNo",gs_pos_trmno)
//【商户单号,不能重复,若重复则返回:数据库错误】
inv_wxpay.of_add_pos("tradeNo",sle_4.text)
//【设备端交易时间:yyyymmddhhmmss】
inv_wxpay.of_add_pos("txnTime",string(now(),"yyyymmddhhmmss"))
//【签名方式:MD5】
inv_wxpay.of_add_pos("signType","MD5")
//【版本号:默认V1.0.0】
inv_wxpay.of_add_pos("version","V1.0.0")
//==================生成商户主扫请求参数============================================================
//【实付金额:分为单位】
inv_wxpay.of_add_pos("amount",string(long(dec(em_1.text) * 100)))
//【订单总金额:分为单位】
inv_wxpay.of_add_pos("total_amount",string(long(dec(em_1.text) * 100)))
//【扫码支付授权码】
inv_wxpay.of_add_pos("authCode",sle_code.text)
//【支付渠道:WXPAY,ALIPAY,YLPAY】
inv_wxpay.of_add_pos("payChannel",ls_zfqd)
//【请求参数数据签名,并生成JSON格式数据】
mle_1.text = inv_wxpay.of_get_json()
ls_data = trim(mle_1.text)
mle_2.text = ""
//【POST数据到平台,并接收返回数据:JSON格式】
mle_2.text = inv_wxpay.of_post_pos(ls_url,ls_data)
//【返回JSON数据转换为XML数据,用于交易解析】
mle_2.text = inv_wxpay.of_json_to_xml(mle_2.text)
//===================================以下判断订单交易情况=============================================
if gf_xml_resolve_pos(mle_2.text,"returnCode") = "000000" and gf_xml_resolve_pos(mle_2.text,"result") = "S" then
if dw_2.rowcount() = 1 then
//【请求数据XML】
dw_2.object.in_xml[1] = mle_1.text
//【交易金额】
dw_2.object.amount[1] = dec(em_1.text)
//【交易时间】
dw_2.object.zf_date_wx[1] = gf_xml_resolve_pos(mle_2.text,"sysTime")
//【订单状态--保存本地数据库】
dw_2.object.trade_state[1] = "支付成功"
//【支付渠道订单号,可用于退款】
dw_2.object.dd_code[1] = gf_xml_resolve_pos(mle_2.text,"orderNo")
//【付款码】
dw_2.object.fk_code[1] = sle_code.text
dw_2.object.zffs[1] = 1
//【更新交易到数据库】
if dw_2.update() = 1 then
commit using sqlca;
dw_2.retrieve(trim(sle_4.text))
else
rollback using sqlca;
end if
end if
//【执行查单操作】
cb_21.triggerevent(clicked!)
//【刷新本地数据】
cb_7.triggerevent(clicked!)
return
end if
//========================================以下判断交易执行情况==================================================
if gf_xml_resolve_pos(mle_2.text,"returnCode") = "000000" and gf_xml_resolve_pos(mle_2.text,"result") = "A" then
messagebox("支付提示【MYSOFT】","状态:【A-等待授权】~n~n【特别注意】:请等候服务对象输入密码确认成功后点[确定]...~n~n还可通过【查询订单状态】检查订单支付情况!")
if dw_2.rowcount() = 1 then
dw_2.object.in_xml[1] = mle_1.text
dw_2.object.amount[1] = dec(em_1.text)
dw_2.object.dd_code[1] = ""
dw_2.object.fk_code[1] = sle_code.text
dw_2.object.zffs[1] = 1
dw_2.object.trade_state[1] = "订单未支付"
if dw_2.update() = 1 then
commit using sqlca;
dw_2.retrieve(trim(sle_4.text))
else
rollback using sqlca;
end if
end if
cb_21.triggerevent(clicked!)
cb_7.triggerevent(clicked!)
return
end if
if gf_xml_resolve_pos(mle_2.text,"returnCode") = "000000" and gf_xml_resolve_pos(mle_2.text,"result") = "A" then
messagebox("支付提示【MYSOFT】","订单等待授权~n~n支付单号:【" + gf_xml_resolve_pos(mle_2.text,"orderNo") + "】~n~n支付状态:【" + gf_xml_resolve_pos(mle_2.text,"result") + "】~n~nA-等待授权,S-交易成功,F-交易失败,Z-交易未知,D-订单已撤销!~n~n请重新支付!~n~n系统返回message:" + inv_wxpay.of_utf8togb3212(gf_xml_resolve_pos(mle_2.text,"message")))
return
end if
if gf_xml_resolve_pos(mle_2.text,"returnCode") = "000000" and gf_xml_resolve_pos(mle_2.text,"result") = "F" then
messagebox("支付提示【MYSOFT】","订单交易失败~n~n支付单号:【" + gf_xml_resolve_pos(mle_2.text,"orderNo") + "】~n~n支付状态:【" + gf_xml_resolve_pos(mle_2.text,"result") + "】~n~nA-等待授权,S-交易成功,F-交易失败,Z-交易未知,D-订单已撤销!~n~n请重新支付!~n~n系统返回message:" + inv_wxpay.of_utf8togb3212(gf_xml_resolve_pos(mle_2.text,"message")))
return
end if
if gf_xml_resolve_pos(mle_1.text,"returnCode") = "000000" and gf_xml_resolve_pos(mle_1.text,"result") = "D" then
messagebox("支付提示【MYSOFT】","订单已撤销~n~n支付单号:【" + gf_xml_resolve_pos(mle_2.text,"orderNo") + "】~n~n支付状态:【" + gf_xml_resolve_pos(mle_2.text,"result") + "】~n~nA-等待授权,S-交易成功,F-交易失败,Z-交易未知,D-订单已撤销!~n~n请重新支付!~n~n系统返回message:" + inv_wxpay.of_utf8togb3212(gf_xml_resolve_pos(mle_2.text,"message")))
return
end if
if gf_xml_resolve_pos(mle_1.text,"returnCode") = "000000" and gf_xml_resolve_pos(mle_1.text,"result") = "Z" then
messagebox("支付提示【MYSOFT】","订单交易未知~n~n支付单号:【" + gf_xml_resolve_pos(mle_2.text,"orderNo") + "】~n~n支付状态:【" + gf_xml_resolve_pos(mle_2.text,"result") + "】~n~nA-等待授权,S-交易成功,F-交易失败,Z-交易未知,D-订单已撤销!~n~n请重新支付!~n~n系统返回message:" + inv_wxpay.of_utf8togb3212(gf_xml_resolve_pos(mle_2.text,"message")))
return
end if
if gf_xml_resolve_pos(mle_2.text,"returnCode") <> "000000" and gf_xml_resolve_pos(mle_2.text,"result") <> "S" then
messagebox("系统提示【MYSOFT】","订单未成功~n~n支付状态:【" + gf_xml_resolve_pos(mle_2.text,"result") + "】~n~n A-等待授权,S-交易成功,F-交易失败,Z-交易未知,D-订单已撤销!~n~n系统返回message:" + inv_wxpay.of_utf8togb3212(gf_xml_resolve_pos(mle_2.text,"message")))
return
end if
if gf_xml_resolve_pos(mle_2.text,"returnCode") <> "000000" then
messagebox("支付提示【MYSOFT】","支付不成功!~n~n~n~n请重新生成订单并扫码... ...~n~n系统返回message:" + inv_wxpay.of_utf8togb3212(gf_xml_resolve_pos(mle_2.text,"message")))
sle_code.text = ""
sle_code.setfocus()
return
end if
return