PB9.0 通过http协议以POST方式将XML发送到协议服务器

KaedaRukawa 2011-10-19 05:07:17
最近接触了银企互联系统,现在需要将生成的xml发送至服务器。
我查看了pb的帮助文件,posturl可以实现该功能,但是pb提供的例子我有点看不懂,
哪位大侠帮忙解释解释。最好有个实例对照。

servicereference.PostURL ( urlname, urldata, headers, {serverport, } data )

Argument Description
servicereference Reference to the Internet service instance.
urlname String specifying the URL to post.
urldata Blob specifying arguments to the URL specified by urlname.
headers String specifying HTML headers. In Netscape, a newline (~n) is required after
each HTTP header and a final newline after all headers.
serverport (optional) Specifies the server port number for the request. The default value
for this argument is 0, which means that the port number is determined by the system
(port 80 for HTTP requests).
data InternetResult instance into which the function returns HTML.

主要问题提就是那个headers是干嘛用的,data又是怎么回事?


工行的开发手册是这么说的
企业按照工行提供的xml包格式进行打包,在局域网内通过http协议以POST方式将交易包发送到NetSafe Client的安全http协议服务器。
http请求格式:action=”http://客户端NetSafe Client的地址和加密端口号/servlet/ICBCCMPAPIReqServlet?userID=证书ID&PackageID=包序列ID &SendTime=请求时间”
请求数据格式(post方式):Version=版本号(区分版本时间,暂定0.0.0.1) &TransCode=交易代码(区分交易类型,每个交易固定)&BankCode=客户的归属单位&GroupCIS=客户的归属编码&ID=客户的证书ID(无证书客户可空)&PackageID=客户的指令包序列号(由客户ERP系统产生,不可重复)&Cert=客户的证书公钥信息(进行BASE64编码;NC客户送空) &reqData=客户的xml请求数据

蓝字标出的部分应该是放到posturl参数的那一部分?
...全文
1877 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ican 2012-12-27
  • 打赏
  • 举报
回复
楼主,实现了就说说怎么实现的吧,我现在也在为这事烦恼呢,跪求呀……
KaedaRukawa 2012-08-27
  • 打赏
  • 举报
回复
好久没来,忘了更新,已经实现了,多谢楼上各位帮助
chenzuo 2012-08-26
  • 打赏
  • 举报
回复
我实现了了,但是服务器返回汉字时是乱码
31737951 2012-08-13
  • 打赏
  • 举报
回复
直接socket最方便 稍微看下通讯协议就可以了 装个 commview 就可以查 tcp包了 照抄就完了 p89有分解xml的
honsonjiang 2012-08-11
  • 打赏
  • 举报
回复
请问楼主解决了此问题吗?如有,可以共享一下你的源码吗?我的地址:honson_jiang@126.com,谢谢!
xhwly 2012-08-02
  • 打赏
  • 举报
回复
我用这种方法,返回-6,(用getURL正常,但因要把xml用流传送,所以不能用getURL),搜索了很多文档,说是只有支持cgi的网站才能用postURL,万一不支持cgi的怎么办呀!
otnto 2011-12-15
  • 打赏
  • 举报
回复
Blob lblb_args
String ls_header
String ls_url
String ls_args
long ll_length
integer li_rc

inet iinet_base,iinet
//internetresult ir
iinet_base = create inet
iinet = create inet

li_rc = GetContextService( "Internet", iinet_base )

IF li_rc = 1 THEN

ir = CREATE n_cst_internet

ls_url = "http://xxx.com/getinfo.asp?"

ls_args = "var1=tr&var2=tttt&var3=&var4=r&var5=&var6=&var7=tttt&var8=&var9=&var10=ttt&var11="

lblb_args = Blob( ls_args )

ll_length = Len( lblb_args )

ls_header = "Content-Type: " + &
"application/x-www-form-urlencoded~n" + &
"Content-Length: " + String( ll_length ) + "~n~n"

li_rc = iinet.PostURL( ls_url, lblb_args, ls_header, ir )

messagebox('',string(li_rc))

END IF

integer li_filenum
li_filenum = fileopen('c:\1.html',textmode!,write!,shared!,replace!,encodingUTF8!)
filewriteex(li_filenum,ir.is_data)
fileclose(li_filenum)


ole_1.object.navigate('c:\1.html')

destroy iinet_base
destroy iinet
destroy ir



ir 建个internetresult的standard class n_interresult作为接收返回值
ir = create n_interresult
n_interresult里 internetdata 加下面代码
is_data = string(data,encodingUTF8!)
return 1


竹林依旧宁静 2011-12-15
  • 打赏
  • 举报
回复
PB9里面有Inet objects,看看帮助,可以试试PostURL函数,具体的参数帮助里面有
KaedaRukawa 2011-11-18
  • 打赏
  • 举报
回复
还有哪位大侠做过这种项目么?能否交流下?
KaedaRukawa 2011-10-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 yyoinge 的回复:]

用这种方式来发送数据

OLEObject dom, http
String Http_Name,result

Http_Name = "http://... "

dom = CREATE OLEObject
http = CREATE OL……
[/Quote]
我试了一下,提示连接失败啊,
yyoinge 2011-10-19
  • 打赏
  • 举报
回复
用这种方式来发送数据

OLEObject dom, http
String Http_Name,result

Http_Name = "http://... "

dom = CREATE OLEObject
http = CREATE OLEObject
//messagebox调试看是否成功
messagebox( 'http ',http.ConnectToNewObject( "Msxml2.XMLHTTP "))
messagebox( 'dom ',dom.ConnectToNewObject( "Msxml2.DOMDocument "))

dom.Load( "c:\xxx.xml ")
http.Open( "POST ", Http_Name, TRUE)
http.Send(dom.xml)
do While http.readyState <> 4 // ' 查询状态,延时
yield()
Loop

result = http.responseText //这个测试用! 你可不写
messagebox( 'result ',result)
PB新大陆星POS扫码支付源码,调用C#动态库,简单实现接口,采用POWERBUILDER9.0开发 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

743

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 脚本语言
社区管理员
  • 脚本语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧