问题1 ,文档中提及了 URL参数是以http://开头的完整URL地址。 而netsuite中向外开放的可用的地址都是https://,难道首信就不支持?这个问题需要与首信确认。 已答复:支持,曾经只有发现一个https无法返回的案例。说明此问题不是主要问题。
问题2,步骤一, 用户从客户中心中自己下了订单后,决定支付,于是到订单页面点'前往支付'按钮,系统要传递订单信息,到suitelet来读取订单的资料,并展示给客户(下方定有一个'确认支付'),内容大致如下:
<form name=form method=post
action="http://pay.beijing.com.cn/prs/user_payment.checkit">
<input type=hidden name=v_mid value="888"> 商户编号
<input type=hidden name=v_oid value="19990720-888-000001234"> 订单编号
<input type=hidden name=v_rcvname value="888"> 收货人姓名
<input type=hidden name=v_rcvaddr value="北京海淀"> 收货人地址
<input type=hidden name=v_rcvtel value="68475566"> 收货人电话
<input type=hidden name=v_rcvpost value="100036"> 收货人邮编
<input type=hidden name=v_amount value="13.45"> 订单总金额
<input type=hidden name=v_ymd value="19990720"> 订单产生日期
<input type=hidden name=v_orderstatus value="0"> 配货状态
<input type=hidden name=v_ordername value="李四"> 订货人姓名
<input type=hidden name=v_moneytype value="0"> 币种,0为人民币,1为美元
<input type=hidden name=v_url value="http://domain/program"> //支付动作完成后返回到该url,支付结果以GET方式发送
<input type=hidden name=v_md5info value="1630dc083d70a1e8af60f49c143a7b95"> //订单数字指纹
<img src="../path/../首信易支付.gif" width="150" height="30"
onClick="document.form.submit();>"
</form>
这个时候这个页面上这些input 可以显示但是已经是不可以修改的form;一旦用户点击这个图片 submit给首信。这个步骤就完毕了,
步骤二,接收返回的页面一,支付完成后页面转到商户时,从首信易支付返回的消息格式(注意,与后台接口程序文档第三部分定时发送方式使用的消息格式有区别); 这个时候要做的事情 ,可能不是告诉netsuite已经支付成功,有可能还只是提交成功,因为首信返回了付款的方式如那家银行等等。这个时候netsuite需要记录这些信息到特定so的特定字段上,
步骤三,
问题3,<SCRIPT language="vbscript" type="text/vbscript" runat=server>
function str2binlExpress(str) 是在md5.inc中定义的,也就是说验证的程序需要调用vbscript 这样netsuite支持吗?
javascript中只有Unicode转换没有ascii码转换,所以要用vbscript中的代码来实现...加了这段代码后,最好在页面中有脚本的地方都写清楚脚本语言,否则可能会出现错误。
解决:c=String.fromCharCode(65)
---------------------------------------------------------------
str.charCodeAt(x),表示将字符串str中的第x个字符转变成ASCII值
求ASCII转字符:javascript用String.fromCharCode(x);vbscript用chr(x)或chrw(x)
求字符转ASCII:javascript用??;vbscript用asc('字符')
chr Asc 这两个函数很难转的 ??碰到了Asc
function str2binlExpress(str)
result = ""
a = ""
b = 0
for i = 1 to len(str)
a = mid(str,i,1)
b = asc(a)
if b > -1 and b < 255 then
result = result & b & ","
end if
if b<0 then
result = result & int((b + 65536)/256) & ","
result = result & (b and 255) & ","
end if
if(b > 255) then
result = result & int((b)/256) & ","
result = result & (b and 255) & ","
end if
next
str2binlExpress = result
end function
将被从vbscript转化为javascript 转化结果如下:
function str2binlExpress(str)
{
result = "";
var a = "";
var b = 0;
for( var i=0; i<str.length; i++)
{
//a = mid(str,i,1); //mid 是从第i位往后的i位
//b = asc(a);
a=str.substr(i,1); //substr 是从i位往后的1位
b = a.charCodeAt(0); //绝对是从0开始的.
if ( b > -1 && b < 255) result = result + b + "," ;
if ( b<0 ) {
result = result + parseInt( (parseInt(b) + 65536)/256 ) + ","; //result = result + int((b + 65536)/256) + ",";
result = result + (b & 255) + "," ;
}
if( b > 255) {
result = result + parseInt( b/256 ) + ","; //result = result + int((b)/256) + ",";
result = result + (b & 255) + ",";
}
}
var str2binlExpress = result;
//alert('str:'+str+'a:'+a+'b:'+b+'str2binlExpress:'+str2binlExpress);
return str2binlExpress;
}
英文状态下是ok的,询问易支付后得知,他们都使用gb2312来校验的,我需要做的就是发送时v_rcvname涉及字符装换;接收时涉及 v_pmode 和 v_pstring的字符转化。
问题4:已确认发送成功,并且银行支付成功,但是没有取得实时的返回,那么原因已排出url是带119个字符并且有参数的原因,那么需要继续测试银行支付成功以后,银行给我中转值的情况。