pb支付宝支付

要接入支付宝,首先需要了解支付宝的接入流程,可以通过官方文档了解快速接入

支付宝接入需要密钥,密钥如果保存在客户端,存在泄漏的风险,推荐密钥保存在服务端

PB可以通过 SATRDA 组件实现服务器接入支付宝,

SATRDA下载地址:http://download.csdn.net/detail/pcwe2002/9620563 

下载完成后,可以开始配置详细配置可以参考说明文档。


PB端调用代码

long ll_rtn,ll_http,ll_len
ulong ll_data,ll_buffer,ll_json,ll_rs
String ls_json,ls_null,ls_server,ls_code
long ll_start

ls_null = ""

ls_server = sle_url.text + "/alipay/precreate"
ll_http = n_api.SATHTTP_Create()
n_api.SatHttp_addformdata( ll_http, "out_trade_no", sle_no.text)
n_api.SatHttp_addformdata( ll_http, "subject", n_api.ansi_to_utf8(sle_subject.text))
n_api.SatHttp_addformdata( ll_http, "total_amount", sle_je.text)
//n_api.SATHTTP_UseGZIP( ll_http, true)
ll_rtn = n_api.SATHTTP_PostForm(ll_http,ls_server)
if ll_rtn <> 200 and ll_rtn <> 500 then
		messagebox("","失败," + string(ll_rtn))
else
	//得到Http返回数据
	ll_buffer = n_api.SATHTTP_GetBuffer(ll_http)
	n_api.Buffer_Append(ll_buffer,n_api.StringToPtr(ls_null),1) 插入1个0
	ll_data = n_api.Buffer_Data(ll_buffer)	//数据内容
	ll_len =  n_api.Buffer_Size(ll_buffer)  //取大小	
	
	
	ls_json = string(ll_data,"address")
	if ll_rtn = 500 then
		messagebox("内部错误",n_api.UTF8_TO_ANSI(ls_json))
		return
	end if
	
	messagebox("",ls_json)
	ll_json = n_api.JsonObject_Create(ls_json)
	
	ll_rs = n_api.JsonObject_Get(ll_json, "alipay_trade_precreate_response")
	ls_code = n_api.JsonObject_GetString(ll_rs,"code")
	if ls_code = "10000" then
		ls_code = n_api.JsonObject_GetString(ll_rs,"qr_code")
		of_qrcode(ls_code,128)
	end if
	
end if
n_api.SATHTTP_Destroy(ll_http)

示例界面



QQ群:345559891  (交流、下载最新版本)



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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值