手机版
1 2 3 4
首页 > 新闻中心 > 翻译公司资讯 >
翻译公司资讯

世联翻译公司如何电子系统“网页支付接入与使用规则 ”中文翻译

发布时间:2019-08-28 16:09  点击:

世联翻译公司如何电子系统“网页支付接入与使用规则 ”中文翻译
手机网页支付接入与使用规则 
手机网页即时到账授权接口(alipay.wap.trade.create.direct) 
手机网页即时到账交易接口(alipay.wap.auth.authandexecute)
附录文档 
版本号:1.0 
 
Alipay (China) Internet Technology Ltd.  All right reserved
手机网页即时到账接口附录文档
 
1 Document Description
1.1 Document Description
本文档是《手机网页即时到账接口》附录文档,它详细解释了在技术接入与使用过程中需要注意的地方,以帮助商户避免风险产生。 
Please contact the related technology support if you have any questions after reading.
1.2 Business terms
Table 1-1 Business Terms
Terms                   Description 
Demand The process of transmitting the data requiring for delivery to the
Return Alipay will send feedbacks to the commercial user websites after Alipay processes them according to the obtained data. 
Sensitive words With sensitively–political tendency, tendency of violence, unhealthy or uncivilized words. 
 
2 Attribution of liability 
All the rules involved in the document are the preventive measures against the main risks during the access and using process of interface. All the commercial users shall care about them. Please strictly follow the interface technological files (手机网页即时到账接口.pdf), example codes, and the access and using rules of this file(手机网页支付接入与使用规则.pdf). Otherwise, they caused risks, assets loss or expanded cases shall be shouldered by the commercial users.
 
 
3 Technology access rules
Table 3-1 Technological access rules
Types Details Reasons
Account No. Configured cooperator ID and safety checking key must be guaranteed matching with the signing information.  Prevent abnormal using of interface or assets loss 
必须保护合作者身份ID、安全校验码key、商户的公私秘钥、支付宝公钥的隐私性 Prevent the signed account information being stolen, loss in capital and despitefully utilized by others 
测试完毕后,要把测试账号立刻更换成签约账号。 使用测试账号时,手续费按照3%扣除。 
Safety 商户必须以DNS解析的方式访问支付宝接口,不要设置DNS cache,不要绑定支付宝IP。如果为了商户自身安全必须绑定支付宝IP时,必须向支付宝的技术支持人员备案。 Once the IP address changes, the commercial address cannot request or access Alipay so that commercial user business cannot be used directly.  
组成 手机网页支付产品由手机网页即时到账授权接口(alipay.wap.trade.create.direct)、手机网页即时到账交易接口(alipay.wap.auth.authandexecute)两个接口组成。 使用时少了其中任何一个接口,都无法正常使用该产品。 
必须先调用手机网页即时到账授权接口(alipay.wap.trade.create.direct)获得授权令牌,再调用手机网页即时到账交易接口(alipay.wap.auth.authandexecute)完成付款。 手机网页即时到账交易接口(alipay.wap.auth.authandexecute)依赖授权令牌(request_token)才能完成付款,而该授权令牌需要通过手机网页即时到账授权接口(alipay.wap.trade.create.direct)获取。 
请求时签名逻辑 All the required parameters shall be sequenced as per the format of parameter name=parameter value in the order of lexicographic order of first character. The character strings to be signed shall be spliced according to the rules of “Parameter name 1=Parameter value 1& Parameter name 2= Parameter value 2&….& Parameter value N= Parameter value N”. 避免报异常错误,如:签名不正确。
When signing the parameters for the request, these parameters must originate from the request parameter list and remove the parameters sign in the list. 避免报异常错误,如:签名不正确。
When signing the requested parameters, as for the parameters of “NULL” in the request parameter list, if selecting to use them, then the parameter value shall not be NULL or NULL value. 避免报异常错误,各种错误码需参考错误码列表。 
Parameter setting Among the request parameter list, the parameters “Not FULL” must be configured. Avoid abnormal using of interface 
Among the variant parameters requiring multiple selection of NULL in the request parameter list, it is must to configure one at least. Avoid abnormal using of interface 
It is mandatory to configure as per the format of all parameters in the request parameter list. Avoid abnormal using of interface 
It is mandatory to set up the request parameters “_input_charset” (encoding format). That is, the parameter shall not be NULL and this parameter shall be added into the signature operation.而且只能设置其值为utf-8,即本产品不支持GBK编码格式。 避免报异常错误,如:签名不正确。
seller_email是收款时的支付宝账号,需要与partner对应的支付宝账号为同一个,也就是说收款支付宝账号必须是签约时的支付宝账号。 避免签约支付宝账号出现资金受损的可能 
签名方式仅支持RSA、MD5两种。如果要使用RSA签名时,签名方式要设置成0001。 避免签名不成功 
参数req_data中节点信息都须按照XML节点格式设置,无顺序要求。不可空的节点信息必须设置。可空的节点支持不设置,也支持设置了但是空值。 如果设置不符合XML格式或不可空节点信息设置疏漏,请求时不会报错,但是返回时支付宝会提示0004,req_data illegal。 
Interface structure The gateway of Alipay must be used to send request message to the Alipay as per the following request gateway:
http://wappaygw.alipay.com/service/rest.htm。 Avoid being angled by phishing website. 
发送给支付宝的请求,请求参数不仅包含参与签名的参数,还包含参数sign。 避免报异常错误,如:签名不正确。
发送给支付宝的请求,如果使用form表单传输,需要按照以下要求编写: 
action的值必须为“http://wappaygw.alipay.com/service/rest.htm?_input_charset=该值”,如: http://wappaygw.alipay.com/service/rest.htm?_input_charset=utf-8。 不允许写成完整的请求链接地址,即禁止http://wappaygw.alipay.com/service/rest.htm?后带有所有要请求给支付宝的请求参数数据; 
<form>与</form>之间需包含所有要请求给支付宝的参数,且每个参数的格式为<input type="hidden" name="参数名" value="参数值" />; 
在众多请求参数中,请求参数_input_charset(编码格式)必须存在于form表单中,即form表单中必须含有<input type="hidden" name="_input_charset" value="参数值">; 
<form>与</form>之间包含的数据只允许是要请求给支付宝的参数,禁止出现商户自行命名,不在接口技术文档请求参数列表中的其他数据; 
form表单的method属性,可自行选择get、post两种。但是,手机网页即时到账交易接口(alipay.wap.auth.authandexecute)只支持get方式传输。
避免请求支付宝时报错,错误码为签名不正确; 
手机网页即时到账交易接口(alipay.wap.auth.authandexecute)如果用POST提交,页面显示会为空白。 专业翻译公司
Data transmission It is a mandatory to us https protocol. Avoid abnormal using of interface  专业翻译公司
在手机网页即时到账授权接口(alipay.wap.trade.create.direct)中,建议使用模拟远程传输方式提交信息及获取返回信息。并且,提交方式仅支持POST。 避免报异常错误(如:签名不正确),得不到授权令牌。 
在手机网页即时到账交易接口(alipay.wap.auth.authandexecute)中,提交方式仅支持GET。 如果用POST提交,页面显示会为空白。 
Notifying returning verification 在手机网页即时到账交易接口(alipay.wap.auth.authandexecute)页面跳转同步通知中,在对通知的参数做签名时,这些参数必须来源于支付宝通知回来的参数,并且除去列表中的参数sign,先对这些参数根据“参数名=参数值”的格式,由字母a到z的顺序进行排序,再依照“参数名1=参数值1&参数名2=参数值2&…&参数名N=参数值N”的规则进行拼接,得到的签名结果与获取到的参数sign值做比较。 验证返回的签名 
在手机网页即时到账交易接口(alipay.wap.auth.authandexecute)服务器异步通知中,需要XML解析明文状态下的参数notify_data,获得节点notify_id的值。 避免无法正常获得通知ID(notify_id),导致校验是否是支付宝发送的验证失败。 
在手机网页即时到账交易接口(alipay.wap.auth.authandexecute)服务器异步通知中,如果有设置服务器异步通知路径,则必须使用获取到的参数notify_id再次请求支付宝,获取是否是支付宝发送的验证结果。该请求链接是: 
https://mapi.alipay.com/gateway.do?partner=合作者身份ID&notify_id=通知ID的值。 验证是否是支付宝发来的请求 
在手机网页即时到账交易接口(alipay.wap.auth.authandexecute)服务器异步通知中,对明文状态下的服务器异步通知参数(除去参数sign)不需要先排序,而是直接依照通知返回的参数顺序,以“参数名1=参数值1&参数名2=参数值2&…&参数名N=参数值N”的规则进行拼接,从而得到待签名字符串。 避免验证签名不正确 
返回数据处理 支付宝主动发送通知,当商户接收到通知数据后必须给支付宝返回“success”字符串,不允许返回其他多余字符。 如果商户返回给支付宝的信息不是“success”,支付宝最多重复发送7次通知。 
必须保证设置的通知路径互联网上能访问得到,且访问顺畅。 避免接收不到支付宝发送的通知 
在手机网页即时到账授权接口(alipay.wap.trade.create.direct)中,需要先对获得的返回数据做解码(URLDECODE),再对这些数据做字符串切割,获得参数res_data的值。此时,如果该接口设置的签名方式sec_id是0001(RSA),还需要对参数res_data做RSA解密,签名方式sec_id是MD5时不需要该步骤。最后对变成明文的参数res_data的值做XML解析,获得授权令牌request_token。 返回数据是一串编码过的字符串。需要对字符串做解码(URLDECODE)、切割、RSA解密、XML解析等步骤。其中任何一步出现问题,则无法获得授权令牌request_token。 
在手机网页即时到账交易接口(alipay.wap.auth.authandexecute)页面跳转同步通知中,可直接用GET方式获得返回数据。 页面跳转同步通知以纯URL带参数的模式返回信息 
在手机网页即时到账交易接口(alipay.wap.auth.authandexecute)服务器异步通知中:
􀁺 如果签名方式sec_id设置的是0001(RSA),则需要先对参数notify_data做RSA解密获得明文;
􀁺 如果签名方式sec_id设置的是MD5,则不需要解密。 
当签名方式是0001(RSA)时,参数notify_data是密文状态,需要解密。 
在手机网页即时到账交易接口(alipay.wap.auth.authandexecute)服务器异步通知中,如果要获得需要的信息,还需要对参数notify_data做XML解析获得子节点信息。 参数notify_data是XML格式的字符串 
必须对返回的数据进行处理。 以便商户能够了解接口的使用情况,以及进行商户的后续业务操作。 
在服务器异步通知页面文件中,需保证商户的所有业务全部运行完成,才能执行打印success的动作。 避免异步通知不正常,如收不到通知或业务处理没有完成却告诉支付宝系统已经处理完成。 
It is suggested each refunding operation shall be recorded to the log operation database of the commercial user website. It is used to check or trail after the business processing conditions when necessary. 
Interface environment Interface cannot be embedded in “iframe” framework. Avoid abnormal using of interface  
Error code processing 请求出错啦 例如seller_account_name不是邮箱格式、请求参数缺失等请求参数不符合设置规则。 
为保障用户账户安全,禁止非手机访问。 该笔交易不是在真实手机上创建或执行的。该类情况一般出现在商户测试阶段,通过pc浏览器来请求支付宝时报错。 
Automatically formulated interface code rules If code illustrations provided by Alipay are not used, then it is mandatory to process chapters and the document technology interface rules, interface using rules and testing flow rules to formulate the interface code meeting the commercial user website project according to the signature mechanism and notification returning data in technological document. Avoid abnormal using of interface  
 
4 Interface access rules
Table 4-1 Interface using rules
Type Standardization Reasons
使用时 对同一笔还没创建支付宝交易的商户订单,支持重复调用手机网页即时到账授权接口(alipay.wap.trade.create.direct),但每一次的req_id值必须保证唯一。 每次请求req_id的值须保证唯一 
对同一笔还没创建支付宝交易的商户订单,支持重复调用手机网页即时到账授权接口(alipay.wap.trade.create.direct),且每次返回的授权令牌都有效,有效时间为24小时。 当支付宝系统中还没有为商户的某笔订单创建支付宝交易时,商户方可以对该笔订单重复调用手机网页即时到账授权接口(alipay.wap.trade.create.direct),但每次返回的授权令牌不会相同。 
手机网页即时到账交易接口(alipay.wap.auth.authandexecute)支持重复调用,前提是交易基本信息(买家、卖家、交易金额、超时时间、商品名称等)在多次调用中保持一致,且交易尚未完成支付。 防止支付失败 
手机网页即时到账交易接口(alipay.wap.auth.authandexecute)重复调用时,也支持同一个token(授权令牌)重复调用,但需要保证该token(授权令牌)对应的交易的买家尚未确定,即该笔交易还未在支付宝中创建。 避免报“买家不符”的错误 
填写买家支付宝账号时,不能与卖家的支付宝账号相同。 避免报错,如错误码:创建交易失败。 
客户端内嵌webview方式实现,需要开启js以及css设置。 避免出现因内嵌引起的兼容性或者界面布局异常、乱码等问题。 
在请求参数中不能存在影响请求格式的特殊字符,如:url、xml格式的特殊字符等。 避免交易失败 
建议商户的业务判断依据以notify_url(服务器异步通知)为准,call_back_url页面文件只做界面展示用途。 避免商户订单数据与支付宝交易数据不同步 
本接口支持的众多支付通道中,储蓄卡支付和信用卡支付一旦进入手机网银系统页面,支付宝将无法控制订单的支付效率问题。 各网银系统的运作及各网银与支付宝间的交互因为网络或其他因素导致支付时的速度快慢不一 
业务应用注意事项 支付宝支付手续费扣取模式分为两种: 
􀁺 实时扣费模式:一般都是收款账户扣费,或采用合同指定固定扣款支付宝账户扣费; 
􀁺 月结手续费模式:实时交易不扣手续费,月底账单统一结算。 
实时扣费时,在扣费支付宝账号的账务明细中可马上查到扣费记录;但月结模式下,则不会查到。 
在集成接口的过程中,如果商户使用seller_email作为收款账户,则当需要修改该支付宝账户名称时,商户必须在程序中做相应修改。 避免支付过程中会出现卖家账户不存在的错误 
测试时 调试阶段时,建议使用1分钱(0.01元)进行测试 降低测试成本 
Network Guarantee network smooth 防止支付时或支付完成后的订单同步出现各类异常 
 
 
5 集成流程详解 
5.1 接入准备 
1. 确认是否已开通手机网页支付功能 
使用签约支付宝账号登录https://b.alipay.com/order/serviceIndex.htm,订单状态为“已完结”表示手机网页支付权限已开通,如下图所示。 
 
图5-1 查询订单状态
如果无法确认,建议联系与支付宝签约协议时的贵公司业务人员。 
2. 确认签约支付宝账号 
集成时需要使用签约的支付宝账号相关信息,包括:支付宝登录账号、合作者身份ID(PID)、交易安全校验码(KEY)。获得方法请参见“7.1 如何获得PID与密钥”。 
3. 确认网站的开发语言 
开发语言是用指定的一种语言来开发网站。支付宝提供的代码示例目前包含PHP、ASP.NET、JAVA三种。 
4. 确认网站编码格式 
查询网站使用的是何种编码格式,可通过在网站网页上点击右键,找到“编码”,打开扩展箭头后查看,默认选中的编码即为网站的编码格式。支付宝提供的代码示例目前仅包含UTF-8一种。 
5. 确认网站签名方式 
签名方式指的是对字符串做加密与解密时的方法。支付宝提供的代码示例目前包含RSA、MD5两种。
6. 确认开发环境 
本机电脑调试环境 
各开发语言对应的开发环境、调试工具等。 
服务器调试环境 
– 服务器需要支持各开发语言对应的环境,如:支持PHP开发语言的SSL服务、CURL服务等。 
– 能够把本地文件上传到服务器上的通道与权限,如:FTP,SFTP传输。 
 
5.2 集成 
5.2.1 接口代码示例配置运行 
解压下载到的接口资料压缩文件(文件名是WS_WAP_PAYWAP.zip),根据商户自身情况选择JAVA(文件夹名为WS_WAP_PAYWAP-JAVA-UTF-8)、PHP(文件夹名为WS_WAP_PAYWAP-PHP-UTF-8)、C#(文件夹名为WS_WAP_PAYWAP-CSHARP-UTF-8)三种开发语言代码示例文件夹中的一个。 
1. JAVA配置流程(以eclipse为例) 
步骤1: 导入代码 
启动JAVA开发软件,把“WS_WAP_PAYWAP-JAVA-UTF-8”文件夹中的“src\com”文件夹、“WebRoot\mages”文件夹、“WebRoot\log”文件夹、“WebRoot\WEB-INF\lib”文件夹、“WebRoot\alipayapi.jsp”、“WebRoot\call_back_url.jsp”、“WebRoot\notify_url.jsp”全部导入到开发环境中。“src\com”文件夹中的文件是类文件,无法与支付宝PC端的其他接口混用。 
步骤2: 配置基本信息 
在JAVA开发环境中,打开“src\com\alipay\config”类目下“AlipayConfig.java”文件,配置partner(合作身份者ID)、key(交易安全校验码)、private_key(商户私钥)、public_key(支付宝公钥)、sign_type(签名类型)等基本信息参数。 
表5-1 JAVA基本信息配置
 
参数 含义 
partner 合作身份者ID,以2088开头由16位纯数字组成的字符串。请参考“7.1 如何获得PID与密钥”。 
key 交易安全检验码,由数字和字母组成的32位字符串。当sign_type设置为MD5时,该参数设置才有效。请参考“7.1 如何获得PID与密钥”。 
private_key 商户方的私钥。当sign_type设置为0001时,该参数设置才有效。请参考“7.2 RSA密钥生成与使用”。 
public_key 支付宝的公钥。当sign_type设置为0001时,该参数设置才有效。请参考“7.2 RSA密钥生成与使用”。 
sign_type 签名方式。在手机网页支付的接口中仅支持两种签名方式,MD5和RSA。对该参数设置的值分别是MD5、0001。 
input_charset 字符编码格式。在手机网页支付的接口中仅支持utf-8。无需修改。 
 
 
步骤3: 配置业务信息 
打开“alipayapi.jsp”文件。配置req_id(请求号)、notify_url(服务器异步通知页面路径)、call_back_url(页面跳转同步通知页面路径)、seller_email(卖家支付宝帐户)、out_trade_no(商户订单号)、subject(订单名称)、total_fee(付款金额)这几个常用业务参数信息。请参考“7.3 业务数据传递”和“7.4 如何增加扩展业务参数”。 
步骤4: 编写同步通知业务逻辑 
打开“call_back_url.jsp”文件。在注释指定位置“//请在这里加上商户的业务逻辑程序代码”写入商户的业务逻辑代码。请参考“7.5 如何更新订单”。 
步骤5: 编写异步通知业务逻辑 
打开“notify_url.jsp”文件(notify_url.jsp需保证无任何HTML代码)。在注释指定位置“//请在这里加上商户的业务逻辑程序代码”写入商户的业务逻辑代码。请参考“7.5 如何更新订单”。需要注意的是,签名方式为0001时,需要先解密,MD5时则不需要。解密后,需要XML解析方可获取参数信息。 
2. PHP配置流程 
 
步骤1: 导入代码 
启动PHP开发软件,把“WS_WAP_PAYWAP-PHP-UTF-8”文件夹中除去“readme.txt”与“openssl”文件夹外的其他所有文件全部导入到开发环境中。“lib”文件夹中的文件是类文件,无法与支付宝PC端的其他接口混用。 
步骤2: 配置基本信息 
在PHP开发环境中,打开“alipay.config.php”文件,配置partner(合作身份者ID)、key(交易安全校验码)、private_key(商户私钥)、public_key(支付宝公钥)、sign_type(签名类型)等基本信息参数。 
 
表5-2 PHP基本信息配置 
 
参数 解释 
partner 合作身份者ID,以2088开头由16位纯数字组成的字符串。请参考“7.1 如何获得PID与密钥”。 
key 交易安全检验码,由数字和字母组成的32位字符串。当sign_type设置为MD5时,该参数设置才有效。请参考“7.1 如何获得PID与密钥”。 
private_key 商户方的私钥。当sign_type设置为0001时,该参数设置才有效。请参考“7.2 RSA密钥生成与使用”。 
public_key 支付宝的公钥。当sign_type设置为0001时,该参数设置才有效。请参考“7.2 RSA密钥生成与使用”。 
sign_type 签名方式。在手机网页支付的接口中仅支持两种签名方式,MD5和RSA。对该参数设置的值分别是MD5、0001。 
input_charset 字符编码格式。在手机网页支付的接口中仅支持utf-8。无需修改。 
cacert ca证书路径地址,用于curl中ssl校验。需要保证cacert.pem文件在当前文件夹目录中。无需修改。 
transport 访问模式,根据自己的服务器是否支持ssl访问,若支持请选择https;若不支持请选择http。该参数只关联到同步通知或异步通知时,验证是否是支付宝发来的请求功能中的支付宝请求地址。无需修改。 
 
步骤3: 配置业务信息 
打开“alipayapi.php”文件。配置req_id(请求号)、notify_url(服务器异步通知页面路径)、call_back_url(页面跳转同步通知页面路径)、seller_email(卖家支付宝帐户)、out_trade_no(商户订单号)、subject(订单名称)、total_fee(付款金额)这几个常用业务参数信息。请参考“7.3 业务数据传递”和“7.4 如何增加扩展业务参数”。 
步骤4: 编写同步通知业务逻辑 
打开“call_back_url.php”文件。在注释指定位置“//请在这里加上商户的业务逻辑程序代码”写入商户的业务逻辑代码。请参考“7.5 如何更新订单”。 
步骤5: 编写异步通知业务逻辑
打开“notify_url.php”文件(notify_url.php需保证无任何HTML代码)。在注释指定位置“//请在这里加上商户的业务逻辑程序代码”写入商户的业务逻辑代码。请参考“7.5 如何更新订单”。需要注意的是,签名方式为0001时,需要先解密,MD5时则不需要。解密后,需要XML解析方可获取参数信息。 
3. ASP.NET(C#)配置流程 
步骤1: 导入代码 
启动.NET开发软件,把“WS_WAP_PAYWAP-CSHARP-UTF-8”文件夹中除去“readme.txt”与“Web.Config”外的其他所有文件全部导入到开发环境中。为防止占用“default.aspx”的名称,可以把“default.aspx”与“default.aspx.cs”两个文件中的核心代码拷贝到新页面文件中去。“app_code”文件夹中的文件是类文件,无法与支付宝PC端的其他接口混用。 
步骤2: 配置基本信息 
在.NET开发环境中,打开“app_code”类目下的“AlipayConfig.cs”文件,配置partner(合作身份者ID)、key(交易安全校验码)、private_key(商户私钥)、public_key(支付宝公钥)、sign_type(签名类型)等基本信息参数。 
表5-3 ASP.NET(C#)基本信息配置
参数 解释 
partner 合作身份者ID,以2088开头由16位纯数字组成的字符串。请参考“7.1 如何获得PID与密钥”。 
key 交易安全检验码,由数字和字母组成的32位字符串。当sign_type设置为MD5时,该参数设置才有效。请参考“7.1 如何获得PID与密钥”。 
private_key 商户方的私钥。当sign_type设置为0001时,该参数设置才有效。请参考“7.2 RSA密钥生成与使用”。 
public_key 支付宝的公钥。当sign_type设置为0001时,该参数设置才有效。请参考“7.2 RSA密钥生成与使用”。 
sign_type 签名方式。在手机网页支付的接口中仅支持两种签名方式,MD5和RSA。对该参数设置的值分别是MD5、0001。 
input_charset 字符编码格式。在手机网页支付的接口中仅支持utf-8。无需修改。 
 
步骤3: 配置业务信息 
打开“default.aspx.cs”文件。配置req_id(请求号)、notify_url(服务器异步通知页面路径)、call_back_url(页面跳转同步通知页面路径)、seller_email(卖家支付宝帐户)、out_trade_no(商户订单号)、subject(订单名称)、total_fee(付款金额)这几个常用业务参数信息。请参考“7.3 业务数据传递”和“7.4 如何增加扩展业务参数”。 
步骤4: 编写同步通知业务逻辑 
打开“call_back_url.aspx”、“call_back_url.aspx.cs”文件。call_back_url.aspx为前端页面可显示一些信息供用户查看,call_back_url.aspx.cs为后台业务代码编写处。 
在注释指定位置“//请在这里加上商户的业务逻辑程序代码”写入商户的业务逻辑代码。请参考“7.5 如何更新订单”。 
步骤5: 编写异步通知业务逻辑 
打开“notify_url.aspx.cs”文件。notify_url.aspx需保证无任何HTML代码,notify_url.aspx.cs为后台业务代码编写处。 
在注释指定位置“//请在这里加上商户的业务逻辑程序代码”写入商户的业务逻辑代码。请参考“7.5 如何更新订单”。需要注意的是,签名方式为0001时,需要先解密,MD5时则不需要。解密后,需要XML解析方可获取参数信息。 
5.2.2 接口代码示例运行逻辑详解 
1. JAVA(以eclipse为例) 
步骤1: 商户为手机网页即时到账授权接口(alipay.wap.trade.create.direct)的请求参数配置好数据后,组装进数组sParaTempToken中,再对该数组做空值过滤(调用AlipayCore类中的paraFilter函数)。 
{req_data=<direct_trade_create_req><notify_url>http://www.xxx.com/WS_WAP_PAYWAP-JAVA-UTF-8/notify_url.jsp</notify_url><call_back_url>http://127.0.0.1:8080/WS_WAP_PAYWAP-JAVA-UTF-8/call_back_url.jsp</call_back_url><seller_account_name>alipayrisk10@alipay.com</seller_account_name><out_trade_no>cs201306170001</out_trade_no><subject>测试</subject><total_fee>0.01</total_fee></direct_trade_create_req>, service=alipay.wap.trade.create.direct, sec_id=0001, partner=2088501624560335, _input_charset=utf-8, req_id=201306170001, v=2.0, format=xml} 
步骤2: 对该数组做参数名首字母升序的排序动作,此时的数组为待签名数组,并把待签名数组转变成待签名字符串(调用AlipayCore类中的createLinkString函数),排序规则请参见“3 技术接入规则”中的“请求时签名逻辑”。 
_input_charset=utf-8&format=xml&partner=2088501624560335&req_data=<direct_trade_create_req><notify_url>http://www.xxx.com/WS_WAP_PAYWAP-JAVA-UTF-8/notify_url.jsp</notify_url><call_back_url>http://127.0.0.1:8080/WS_WAP_PAYWAP-JAVA-UTF-8/call_back_url.jsp</call_back_url><seller_account_name>alipayrisk10@alipay.com</seller_account_name><out_trade_no>cs201306170001</out_trade_no><subject>测试</subject><total_fee>0.01</total_fee></direct_trade_create_req>&req_id=201306170001&sec_id=0001&service=alipay.wap.trade.create.direct&v=2.0 
步骤3:对该字符串做签名(调用AlipaySubmit类中的buildRequestMysign函数),规则参见“3 技术接入规则”中的“请求时签名逻辑”。 
O8DH9HG2yRkbUrIz0jtKaPZRcWqqgcuGEtI6576Yibh60iX7azXTq2D4ZYWaX16kBy8MNSE4PBuPcrxe66kQW/Ufhoa/f+0jeUx5RC3/A0as+/vOOCmQnO0VTyRTp2DHLvcL3k9EKow6FsFuQHZPpHsQnzzRUSlQ+vGI+dPYUSU= 
步骤4: 把签名结果赋值给参数sign,并把sign加入之前的待签名数组中,此时得到的便是要请求给支付宝的全部数据。 
{req_data=<direct_trade_create_req><notify_url>http://www.xxx.com/WS_WAP_PAYWAP-JAVA-UTF-8/notify_url.jsp</notify_url><call_back_url>http://127.0.0.1:8080/WS_WAP_PAYWAP-JAVA-UTF-8/call_back_url.jsp</call_back_url><seller_account_name>alipayrisk10@alipay.com</seller_account_name><out_trade_no>cs201306170001</out_trade_no><subject>测试</subject><total_fee>0.01</total_fee></direct_trade_create_req>, service=alipay.wap.trade.create.direct, partner=2088501624560335, sec_id=0001, _input_charset=utf-8, req_id=201306170001, sign=O8DH9HG2yRkbUrIz0jtKaPZRcWqqgcuGEtI6576Yibh60iX7azXTq2D4ZYWaX16kBy8MNSE4PBuPcrxe66kQW/Ufhoa/f+0jeUx5RC3/A0as+/vOOCmQnO0VTyRTp2DHLvcL3k9EKow6FsFuQHZPpHsQnzzRUSlQ+vGI+dPYUSU=, format=xml, v=2.0} 
步骤5:模拟远程HTTP协议请求支付宝(调用AlipaySubmit类中的buildRequest (String ALIPAY_GATEWAY_NEW, String strParaFileName, String strFilePath,Map<String, String> sParaTemp) throws Exception函数),得到支付宝的处理结果,字符串文本格式。 
res_data=wzpwl6nSd%2B0aYMQaltXjmEdJgeAkLH2dupVrHNNKknd33wwqgbDlhj3gAur%2F1WTLSFWQcw8Q%2Fb8XKk8r0Ti14pTbH9wzhyOeElGfd4Ks1HKkqZFXLX7YVhfBH7lHjJiNFBzMZhMAGy%2BhAgiwbw4mvIjQF%2Bu%2BGS3SRK%2B4wy2QmptEEcqVseMgHr56MYeFfdvxzbx%2FT06%2B%2Fg5pdIre94H6ZL0mDR8IobzQnJV1mq%2B9YMXNUspsRzXCHhcbKEq7xqDVdE5eb43LvNKa8ypR9hMiYd5%2FOLAuYnpetM81IzGNC83kioh5hsSoLgEErCrMklxucR7X5U6l22APeK6i%2FbT8TA%3D%3D&service=alipay.wap.trade.create.direct&sec_id=0001&partner=2088501624560335&req_id=201306170001&sign=ll2LBlP66aZArPUJV9Vd3Tfo6m7PLiI8IQRNjjwFjg6NXS4PCjTdY6PlCnB5MmllNFurI2J5GuL7LUCKVSlO58hUpxQrllpoYNorKx%2BUKXYOAmPilRa2zHry%2BjVUlW9qNp4jLI2oDY8lgBbKr%2BkL3BYO0GU0Stv4zAhokAaF9ho%3D&v=2.0 
步骤6:对该结果做URLDECODE解码工作(调用urldecode函数)。 
res_data=wzpwl6nSd+0aYMQaltXjmEdJgeAkLH2dupVrHNNKknd33wwqgbDlhj3gAur/1WTLSFWQcw8Q/b8XKk8r0Ti14pTbH9wzhyOeElGfd4Ks1HKkqZFXLX7YVhfBH7lHjJiNFBzMZhMAGy+hAgiwbw4mvIjQF+u+GS3SRK+4wy2QmptEEcqVseMgHr56MYeFfdvxzbx/T06+/g5pdIre94H6ZL0mDR8IobzQnJV1mq+9YMXNUspsRzXCHhcbKEq7xqDVdE5eb43LvNKa8ypR9hMiYd5/OLAuYnpetM81IzGNC83kioh5hsSoLgEErCrMklxucR7X5U6l22APeK6i/bT8TA==&service=alipay.wap.trade.create.direct&sec_id=0001&partner=2088501624560335&req_id=201306170001&sign=ll2LBlP66aZArPUJV9Vd3Tfo6m7PLiI8IQRNjjwFjg6NXS4PCjTdY6PlCnB5MmllNFurI2J5GuL7LUCKVSlO58hUpxQrllpoYNorKx+UKXYOAmPilRa2zHry+jVUlW9qNp4jLI2oDY8lgBbKr+kL3BYO0GU0Stv4zAhokAaF9ho=&v=2.0 
步骤7:对这串结果字符串做字符串切割,获取返回参数的信息。注意,如果签名方式设置的是0001(RSA),那么还需要对这结果中的返回参数res_data做解密工作;如果签名方式设置的是MD5,则结果中的返回参数res_data直接显示明文。 
res_data=<?xml version="1.0" encoding="utf-8"?><direct_trade_create_res><request_token>2013061725bc6b978788d6f2459d0af9a49ea2f3</request_token></direct_trade_create_res>&service=alipay.wap.trade.create.direct&sec_id=0001&partner=2088501624560335&req_id=201306170001&sign=ll2LBlP66aZArPUJV9Vd3Tfo6m7PLiI8IQRNjjwFjg6NXS4PCjTdY6PlCnB5MmllNFurI2J5GuL7LUCKVSlO58hUpxQrllpoYNorKx+UKXYOAmPilRa2zHry+jVUlW9qNp4jLI2oDY8lgBbKr+kL3BYO0GU0Stv4zAhokAaF9ho=&v=2.0 
接着把XML结构的res_data的值做XML解析,从中获取子节点request_token的值(这一系列过程需调用AlipaySubmit类中的parseResponse函数),这个值就是授权令牌。 
2013061725bc6b978788d6f2459d0af9a49ea2f3 
步骤8:商户为手机网页即时到账交易接口(alipay.wap.auth.authandexecute)的请求参数配置好数据后,与步骤一、二、三、四同理,把数据组装进数组sParaTemp中。 
{req_data=<auth_and_execute_req><request_token>2013061725bc6b978788d6f2459d0af9a49ea2f3</request_token></auth_and_execute_req>, service=alipay.wap.auth.authAndExecute, sec_id=0001, partner=2088501624560335, _input_charset=utf-8, v=2.0, format=xml} 
对该数组做空值过滤(调用AlipayCore类中的paraFilter函数),对该数组做参数名首字母升序的排序动作,把待签名数组转变成待签名字符串,对该字符串做签名(调用AlipaySubmit类中的buildRequestMysign函数),把签名结果赋值给参数sign,并把sign加入之前的待签名数组中,此时得到的便是要请求给支付宝的全部数据。 
{req_data=<auth_and_execute_req><request_token>2013061725bc6b978788d6f2459d0af9a49ea2f3</request_token></auth_and_execute_req>, service=alipay.wap.auth.authAndExecute, partner=2088501624560335, sec_id=0001, _input_charset=utf-8, sign=jqUVcsnO3CX2c3/b2WqALKL+AJgxnB9rT87LJ31BBHqNd6DixUmtd4ht6qz9TqpX9nuI+EaPnYIhPcF+okas2bGn7ju4V3TS0805g/7mELsuW8/kcGOd/+zLvLqH7tXY0oilb4Bq/fTb8FewVuBWSMkZXIzovc9he0c1dTklXPQ=, format=xml, v=2.0} 
步骤9:以GET方式,请求支付宝(调用AlipaySubmit类中的buildRequest(String ALIPAY_GATEWAY_NEW, Map<String, String> sParaTemp, String strMethod, String strButtonName)函数),此时商户的页面会自动跳转至支付宝收银台。
 
图5-2 跳转至支付宝收银台
后面的动作全由买家在支付宝收银台中操作完成。
步骤10: 当这笔交易被买家支付成功后支付宝收银台上显示该笔交易成功,并提示用户可返回商户网站。买家点击该功能按钮后,则当前界面会跳转回商户设置的call_back_url页面文件去,如果长时间没有点击,则当前支付宝收银台界面会自动跳转至商户call_back_url页面文件去。此时商户的call_back_url页面会收到一串带有处理结果数据的链接地址。 
http://127.0.0.1:8080/WS_WAP_PAYWAP-JAVA-UTF-8/call_back_url.jsp?out_trade_no=cs201306170001&request_token=requestToken&result=success&trade_no=2013061741934035&sign=UCUm6GVdi7MEcNnDbD7UnG0UyEyUtuKOSuhPQbrGxUvLUmRJEctMm5NxYV%2FtvWT0VCGbM%2F4zaAlYy1EP4bFLisoyprq%2FQ9H5XMnO%2FOZ5E1XclGXiD%2FLMbMGoYCqNmI22MxMZ0OmL9UoUSrT2f4%2B8EDCtkDsnUsG82K4GnjSmJ2w%3D&sign_type=0001 
步骤11: 用GET方式获得这些返回数据,与步骤一、二、三、四同理,对数组params做空值过滤、参数名首字母升序的排序、待签名数组转变成待签名字符串。 
out_trade_no=cs201306170001&request_token=requestToken&result=success&trade_no=2013061741934035 
对该字符串做签名验证(这一系列动作为调用AlipayNotify类中的verifyReturn函数完成),得到布尔类型的验证结果,完成call_back_url页面文件的验证动作。 
步骤12: 买家对一笔交易付款完成的同时,除了支付宝会触发页面跳转至call_back_url文件的同步通知动作,还会自动触发服务器异步通知页面文件(商户设置参数notify_url的值)。此时,商户的notify_url文件也会收到支付宝异步通知回来的数据。 
{service=alipay.wap.trade.create.direct, sign=V2fgcO2jwZ5G/HcDRS3N7m2TNqRSHFqvF7wQ6xD52NgLtNMhx2H+4H/yv5yKZxt1xY5K1aMfv6MsO0fpKAYZaZFg+WYs925IbAzpscbK72fzuhvfikjbEvuOLHY+LGNXwkn+VhQBBNkHs4GNJSM1iZ1jcCxm8NU9oANviZDMAcg=, sec_id=0001, v=1.0, notify_data=0R5IeCoVWRerPIERgTFrQOUfIiw0FHmHGe6elY6VYp1WZU5bRsQkK5ekMcceD412gO+KgqPzvAKVQG1h3dwuhWgaHPdL5oNj1eIzf4PUuRYOb7qCwFMqpNDQ9Jznbm89kCqjenhWSIwQ/2Aad+4RPHOKy9AzAWut02MiW7g8gH49Nb1rjki+u7QQN+xQ/Q/Fr4f2RlcoiutfsYB2mCy8smtjaH2LmE5wNz0I5yHMxnf9+NCkjmOJdZZrOC2wXly/tzLY6w+zef+m5s184D80HejiUPOlS8dBtmEPs+SQzA5N7eu0BF1pPj9m7wyTINf6k4GlkQtvNM6UZd2cwuthwZeYcax5Db0rWYyDaQOCH/gEUShzD6za84Gpj9/grKnvMy65C7ihmcb4wtA7CNiQSnLiQZ3ksUGjB0WiwTpL9JeQqyVWJZiSpRXt73B9/qT1hzf5K1CWHTzD0zfOjifFbSrXQmAt5oIoMM49W7Ds95fTZNde3czzf/hrcUQEI3LNW+6e975+Vl4O+fmxxBeGaI1Ls1EBTdZpDoNl35U7uhzdkbBzJR4AYY6H9xD2QmjtAS3GelIXpiqC29FbwwFLbEQM/a9xAS3KS8jIyDWEAK4dJi3U+F/QTismfjp7dfT2KqU89wsqJ+BtMwWLaOPvz1BSpj1TVYYmgK5MdLjh6S+GVH4ka/RcU2nGqpO1cNHBHa0j2wY7Uu1p3SiSa62NTbu0wvLqiT3fs6K6PDwVkxGDAPsQaXvCGrMRhhVLc7M5AcCVSBCJd4LAJU/BfTcYZjiFcKSlSSYKMNFZRusNcFtzrbvi1u4gwHRnRYr11Z/pwGbQ5LtxV083lXtEkJ1fWFzt84hxfcOGH+o9EgJBKyIahQfyHfRir5quiixBqp5xWR8DU5nJNAW+/MLgPzNYt+uaIPadqrBt/j7+0gdgFEdLzPLncI9h0VdlmdgO+CvxJ1aKYi2pDY64oTzm87CN/Fiof1n8SjZRgGh/ClxIJHunI9DCmVszMtVkQhJwQzkIj9YnV+3n0Q3wjos3iE69WJjHk+DpN8ARZiAJEFKtGT9lMnIf1JfbpXmdM1arFV1doMEb8vKLN4kHioR4DhVyDvaLfo4rsgvGcLSB65R4Ya4tVdk1e0+vnk+U/NMk9zrJf39hInyBoazUpkPIqmmQIAvkpSbnbGuZUdqri9fame2e/gPkUzYqzo/gt6OCuzIdtVtVI0kQXGfCz9XpazmYbTcKA9Ck6z6WF2lN7lIJH9DSNB7lCDM/cKD7xEZ5lFRucz1sOsvZNpNhH8R7EnyQYEo7NM9ph8gDfgaVaaWh1+13TJfwvC5WBOi+5KyKh+6qb4Z98tFkxrqyU2Kn6hFAoQ==} 
步骤13: 用POST方式获得这些返回数据。如果签名方式设置的是0001(RSA)时,需要先对这些数据中的参数notify_data做解密;如果签名方式设置的是MD5,因为直接返回明文,所以不需要解密。 
{service=alipay.wap.trade.create.direct, sign=V2fgcO2jwZ5G/HcDRS3N7m2TNqRSHFqvF7wQ6xD52NgLtNMhx2H+4H/yv5yKZxt1xY5K1aMfv6MsO0fpKAYZaZFg+WYs925IbAzpscbK72fzuhvfikjbEvuOLHY+LGNXwkn+VhQBBNkHs4GNJSM1iZ1jcCxm8NU9oANviZDMAcg=, sec_id=0001, v=1.0, notify_data=<notify><payment_type>1</payment_type><subject>测试</subject><trade_no>2013061741934035</trade_no><buyer_email>xxxxxxx@xx.com</buyer_email><gmt_create>2013-06-17 19:15:58</gmt_create><notify_type>trade_status_sync</notify_type><quantity>1</quantity><out_trade_no>cs201306170001</out_trade_no><notify_time>2013-06-17 19:16:09</notify_time><seller_id>2088501624560335</seller_id><trade_status>TRADE_FINISHED</trade_status><is_total_fee_adjust>N</is_total_fee_adjust><total_fee>0.01</total_fee><gmt_payment>2013-06-17 19:16:08</gmt_payment><seller_email>alipayrisk10@alipay.com</seller_email><gmt_close>2013-06-17 19:16:08</gmt_close><price>0.01</price><buyer_id>2088002396712354</buyer_id><notify_id>78fca98191478a5e64459d8ef88601183y</notify_id><use_coupon>N</use_coupon></notify>} 
notify_url异步通知的签名验证规律与call_back_url不同,商户只需要顺序获取支付宝的返回数据,不需要对这些参数排序。因此,直接把数组params转变成待签名字符串。 
service=alipay.wap.trade.create.direct&v=1.0&sec_id=0001&notify_data=<notify><payment_type>1</payment_type><subject>测试</subject><trade_no>2013061741934035</trade_no><buyer_email>xxxxxxx@xx.com</buyer_email><gmt_create>2013-06-17 19:15:58</gmt_create><notify_type>trade_status_sync</notify_type><quantity>1</quantity><out_trade_no>cs201306170001</out_trade_no><notify_time>2013-06-17 19:16:09</notify_time><seller_id>2088501624560335</seller_id><trade_status>TRADE_FINISHED</trade_status><is_total_fee_adjust>N</is_total_fee_adjust><total_fee>0.01</total_fee><gmt_payment>2013-06-17 19:16:08</gmt_payment><seller_email>alipayrisk10@alipay.com</seller_email><gmt_close>2013-06-17 19:16:08</gmt_close><price>0.01</price><buyer_id>2088002396712354</buyer_id><notify_id>78fca98191478a5e64459d8ef88601183y</notify_id><use_coupon>N</use_coupon></notify> 
接着对该字符串做签名验证(这一系列动作调用AlipayNotify类中的verifyNotify函数),得到布尔类型的验证结果,完成notify_url页面文件的验证动作。 
步骤14: 在notify_url页面文件中,参数notify_data是XML结构的字符串,需要先XML解析,再获取需要的子节点数据。 
2. PHP 
步骤1: 商户为手机网页即时到账授权接口(alipay.wap.trade.create.direct)的请求参数配置好数据后,组装进数组$para_token中,再对该数组做空值过滤(调用AlipayCore类中的paraFilter函数)。 
$para_token = array( 
"service" => "alipay.wap.trade.create.direct", 
"partner" => "2088501624560335", 
"sec_id" => "0001", 
"format" => "xml", 
"v" => "2.0", 
"req_id" => "201306140001", 
"req_data" => "<direct_trade_create_req><notify_url>http://www.xxx.com/WS_WAP_PAYWAP-PHP-UTF-8/notify_url.php</notify_url><call_back_url>http://127.0.0.1:8800/WS_WAP_PAYWAP-PHP-UTF-8/call_back_url.php</call_back_url><seller_account_name>alipayrisk10@alipay.com</seller_account_name><out_trade_no>cs201306140001</out_trade_no><subject>测试</subject><total_fee>0.01</total_fee></direct_trade_create_req>", 
"_input_charset" => "utf-8" 
); 
步骤2:对该数组做参数名首字母升序的排序动作(调用AlipayCore类中的argSort函数)(排序规则请参见“3 技术接入规则”中的“请求时签名逻辑”),此时得到的数组为待签名数组。 
$para_token = array( 
"_input_charset"=> "utf-8", 
"format" => "xml", 
"partner" => "2088501624560335", 
"req_data" => "<direct_trade_create_req><notify_url>http://www.xxx.com/WS_WAP_PAYWAP-PHP-UTF-8/notify_url.php</notify_url><call_back_url>http://127.0.0.1:8800/WS_WAP_PAYWAP-PHP-UTF-8/call_back_url.php</call_back_url><seller_account_name>alipayrisk10@alipay.com</seller_account_name><out_trade_no>cs201306140001</out_trade_no><subject>测试</subject><total_fee>0.01</total_fee></direct_trade_create_req>", 
"req_id" => "201306140001", 
"sec_id" => "0001", 
"service" => "alipay.wap.trade.create.direct", 
"v" => "2.0" 
); 
步骤3: 把待签名数组转变成待签名字符串。 
_input_charset=utf-8&format=xml&partner=2088501624560335&req_data=<direct_trade_create_req><notify_url>http://www.xxx.com/WS_WAP_PAYWAP-PHP-UTF-8/notify_url.php</notify_url><call_back_url>http://127.0.0.1:8800/WS_WAP_PAYWAP-PHP-UTF-8/call_back_url.php</call_back_url><seller_account_name>alipayrisk10@alipay.com</seller_account_name><out_trade_no>cs201306140001</out_trade_no><subject>测试</subject><total_fee>0.01</total_fee></direct_trade_create_req>&req_id=201306140001&sec_id=0001&service=alipay.wap.trade.create.direct&v=2.0 
并对该字符串做签名(调用AlipaySubmit类中的buildRequestMysign函数),转变规则请参见“3 技术接入规则”中的“请求时签名逻辑”。 
EGb8F+aWwBhotwNSQwF9Sik2OzQffV1Val1STvrRj4MzE1W4pLM6Mfjk3/4Vj3ci4Pspcm1OLDHPZ2JQNsFruS6d4bFSQrtEF52irwSF+re42+TBTRe7w8TZAjBnBBLLknerq0DvN86SfA6QaXOl/nOfgcMfCx3YtJnX9u2Yi/k= 
步骤4:把签名结果赋值给参数sign,并把sign加入之前的待签名数组中,此时得到的便是要请求给支付宝的全部数据。 
$para_token = array( 
"_input_charset"=> "utf-8", 
"format" => "xml", 
"partner" => "2088501624560335", 
"req_data" => "<direct_trade_create_req><notify_url>http://www.xxx.com/WS_WAP_PAYWAP-PHP-UTF-8/notify_url.php</notify_url><call_back_url>http://127.0.0.1:8800/WS_WAP_PAYWAP-PHP-UTF-8/call_back_url.php</call_back_url><seller_account_name>alipayrisk10@alipay.com</seller_account_name><out_trade_no>cs201306140001</out_trade_no><subject>测试</subject><total_fee>0.01</total_fee></direct_trade_create_req>", 
"req_id" => "201306140001", 
"sec_id" => "0001", 
"service" => "alipay.wap.trade.create.direct", 
"v" => "2.0", 
"sign" => "EGb8F+aWwBhotwNSQwF9Sik2OzQffV1Val1STvrRj4MzE1W4pLM6Mfjk3/4Vj3ci4Pspcm1OLDHPZ2JQNsFruS6d4bFSQrtEF52irwSF+re42+TBTRe7w8TZAjBnBBLLknerq0DvN86SfA6QaXOl/nOfgcMfCx3YtJnX9u2Yi/k=" 
); 
步骤5: 模拟远程HTTP协议请求支付宝(调用AlipaySubmit类中的getHttpResponsePOST函数),得到支付宝的处理结果,字符串文本格式。 
res_data=wftFwWhcSfy%2Bjowl544yEn1taSiLPbtgKcLqaLYDeJ9DFMvQXPJGO3tE%2FJzsCQsnSv5i%2FhJHTggXJpVBhmP1gwTQiBv32UsO5cFcFagQfdxet5axkmfsRmGwIaOD2eMJ4dXK%2FyHXkEgE1mxhjgBj5xtbZoZQJssSL%2F7ppYhIlGrU3Mabt0tdKoY6l3B2t0JUqHKYq4b8xCFx9AEDjA2lSrJ%2BZYcVlVJWZBbQPJmWkB5RYHp9Shfj302qxFpwxsI%2FVX2jZq1AXyQMnKBjj57xXtV5r4OZnH%2BxbXMBPnJsNnQ6NpTgjXdDU05eAo4NGiC7bHTcEZJRkJKE54oyn3jKNw%3D%3D&service=alipay.wap.trade.create.direct&sec_id=0001&partner=2088501624560335&req_id=201306140001&sign=Bdzmfbs2YONm7aO67zu%2FERNJa1hm8zYd3TVFCzXrsGrafc%2BS4svEk8TRFyOpLpF5SUI639j4uiOrObrSfYLr6EeVj8bMpDZhwdFqgr4O8CFCtZN6dvbbmBPy7LpXbP8mLplQNfJQTeagbGAa49X33cibM376yqLLsogAx%2FowTs4%3D&v=2.0 
步骤6: 对该结果做URLDECODE解码工作(调用urldecode函数)。 
res_data=wftFwWhcSfy+jowl544yEn1taSiLPbtgKcLqaLYDeJ9DFMvQXPJGO3tE/JzsCQsnSv5i/hJHTggXJpVBhmP1gwTQiBv32UsO5cFcFagQfdxet5axkmfsRmGwIaOD2eMJ4dXK/yHXkEgE1mxhjgBj5xtbZoZQJssSL/7ppYhIlGrU3Mabt0tdKoY6l3B2t0JUqHKYq4b8xCFx9AEDjA2lSrJ+ZYcVlVJWZBbQPJmWkB5RYHp9Shfj302qxFpwxsI/VX2jZq1AXyQMnKBjj57xXtV5r4OZnH+xbXMBPnJsNnQ6NpTgjXdDU05eAo4NGiC7bHTcEZJRkJKE54oyn3jKNw==&service=alipay.wap.trade.create.direct&sec_id=0001&partner=2088501624560335&req_id=201306140001&sign=Bdzmfbs2YONm7aO67zu/ERNJa1hm8zYd3TVFCzXrsGrafc+S4svEk8TRFyOpLpF5SUI639j4uiOrObrSfYLr6EeVj8bMpDZhwdFqgr4O8CFCtZN6dvbbmBPy7LpXbP8mLplQNfJQTeagbGAa49X33cibM376yqLLsogAx/owTs4=&v=2.0 
步骤7: 对这串结果字符串做字符串切割,获取返回参数的信息。其中,如果签名方式设置的是0001(RSA),那么还需要对这结果中的返回参数res_data做解密工作;如果签名方式设置的是MD5,则结果中的返回参数res_data直接显示明文。 
res_data= <?xml version="1.0" encoding="utf-8"?><direct_trade_create_res><request_token>20130614039a363773d04690f4196e888bf7b1ff</request_token></direct_trade_create_res>&service=alipay.wap.trade.create.direct&sec_id=0001&partner=2088501624560335&req_id=201306140001&sign=Bdzmfbs2YONm7aO67zu/ERNJa1hm8zYd3TVFCzXrsGrafc+S4svEk8TRFyOpLpF5SUI639j4uiOrObrSfYLr6EeVj8bMpDZhwdFqgr4O8CFCtZN6dvbbmBPy7LpXbP8mLplQNfJQTeagbGAa49X33cibM376yqLLsogAx/owTs4=&v=2.0
接着把XML结构的res_data的值做XML解析,从中获取子节点request_token的值(这一系列过程需调用AlipaySubmit类中的parseResponse函数),这个值就是授权令牌。 
20130614039a363773d04690f4196e888bf7b1ff 
步骤8:商户为手机网页即时到账交易接口(alipay.wap.auth.authandexecute)的请求参数配置好数据后,与步骤一、二、三、四同理,把数据组装进数组$parameter中。 
$parameter = array( 
"service" => "alipay.wap.auth.authAndExecute", 
"partner" => "2088501624560335", 
"sec_id" => "0001", 
"format" => "xml", 
"v" =>"2.0", 
"req_id" => "201306140001", 
"req_data"=> "<auth_and_execute_req><request_token>20130614039a363773d04690f4196e888bf7b1ff</request_token></auth_and_execute_req>", 
"_input_charset" => "utf-8" 
); 
对该数组做空值过滤(调用AlipaySubmit类中的paraFilter函数),对该数组做参数名首字母升序的排序动作(调用AlipaySubmit类中的argSort函数),把待签名数组转变成待签名字符串,对该字符串做签名(调用AlipaySubmit类中的buildRequestMysign函数),把签名结果赋值给参数sign,并把sign加入之前的待签名数组中,此时得到的便是要请求给支付宝的全部数据。 
$parameter = array( 
"_input_charset"=> "utf-8", 
"format" => "xml", 
"partner" => "2088501624560335", 
"req_data"=> "<auth_and_execute_req><request_token>20130614039a363773d04690f4196e888bf7b1ff</request_token></auth_and_execute_req>", 
"req_id" => "201306140001", 
"sec_id" => "0001", 
"service" => "alipay.wap.auth.authAndExecute", 
"v" => "2.0", 
"sign" => "vtkY9FLWCzJSlpxiNicV85FAGSTacoV7X5k2zLLPAMfMJZPlk6FpJ2/s94g0R0AcEHZyvOp8D4qhR/p1TMRuqw5Hr86LeTeyR52d9VK1NDKrBRSzw6rXG8R6LqUJkkv1i095z1a5VeJW2G46MjQkDAY+AIDWbUx1XCSAaiyx4X4=" 
);
步骤9: 以GET方式,请求支付宝(调用AlipaySubmit类中的buildRequestForm函数),此时商户的页面会自动跳转至支付宝收银台。
 
图5-3 跳转至支付宝收银台
后面的动作全由买家在支付宝收银台中操作完成。
步骤10: 当这笔交易被买家支付成功后支付宝收银台上显示该笔交易成功,并提示用户可返回商户网站。买家点击该功能按钮后,则当前界面会跳转回商户设置的call_back_url页面文件去,如果长时间没有点击,则当前支付宝收银台界面会自动跳转至商户call_back_url页面文件去。此时商户的call_back_url页面会收到一串带有处理结果数据的链接地址。 
http://127.0.0.1:8800/WS_WAP_PAYWAP-PHP-UTF-8/call_back_url.php?out_trade_no=cs201306140001&request_token=requestToken&result=success&trade_no=2013061435574635&sign=UmQGu7GQ6lQuisaK9FhQjl1UO3K%2BEt%2BXDsbdnuHuex38I1ssnsrTlADpCFHWfeezZs4%2FW5knSMo%2Fmg2DheSRSLj4%2FOTJRUtcnAJmiwmeK%2Bj9icN8vz5pcAXlXiFrwb9oTj8gLCOeY3GLXRmCVHTUW9UD89ZI9IraxsxCHgXQZaQ%3D&sign_type=0001 
步骤11: 用GET方式获得这些返回数据,与步骤一、二、三、四同理,对数组$_GET做空值过滤、参数名首字母升序的排序、待签名数组转变成待签名字符串。 
out_trade_no=cs201306140001&request_token=requestToken&result=success&trade_no=2013061435574635 
对该字符串做签名验证(这一系列动作为调用AlipayNotify类中的verifyReturn函数完成),得到布尔类型的验证结果,完成call_back_url页面文件的验证动作。 
步骤12: 买家对一笔交易付款完成的同时,除了支付宝会触发页面跳转至call_back_url文件的同步通知动作,还会自动触发服务器异步通知页面文件(商户设置参数notify_url的值)。此时,商户的notify_url文件也会收到支付宝异步通知回来的数据。 
{service=alipay.wap.trade.create.direct, sign=MK1Q0vAATXdJTiBOxCh3XLulQDJgvYD7tU3doIpYuZEf/JCMi6MubmanJbJ9TdSbGK3iM7anDxwdflM9DVaPuc7ZdqS0Xp4N+YGUXzlcm3al2lcAMjh7ttAsPy4cia4kKWJo0ATZZeIP8jkZG2L46nBeElqo3ZcbeMQklFhu6ak=, sec_id=0001, v=1.0, notify_data=wd2ALy4RTeR2xvoSUsphr98A2Ctm2rbOvhG/T8+U2vD0xTTwHf5sGsmRV+s33SLZIZQ/dJyUxIvmkrvpPDWsT1T+qRWc6MVT32Na/5JdQyyE89e6bhJHmQk+OjyCF68XdsCDa0cw8QtA5ScFfeIcV6ryXCw61uwtgBEebMDL0d8j9IWUYs1nnLdW1HNfRo8AUH6hEQpbz3pboMxVLZcXcFTKReb1NuIfe5Df0x9tfeU1pnN+JewkUFsqQP9jMZD7PWjfjX+Lml1st9ftHfhzZ+w/s116i1oW8MONEkwStQkT2yVBGmCpLw0IZeS/LZth1eyM2oUfDMOA1aK7zeuP8ICdU2TjMNOahkBipBdgLpjQgaAW/xaO5LKirg6Au7IRtHeKBf1haXcQ3LNkgc3HttbmATjJaMQM535CGaaXK7zFsHZCB3k1uk3I1PJ2tVX2Uy+xkSZP/h20/IxHlSdj8xXDe74g2XYtBbsVd8Qmd7gf8YNwQk+WYtMsAbHCzugE0MvxTwyyG1XoGyCRHYe7u2oudsQGzbrAyrGuMHpnv3Ku09up2sjcn0h5zAOUDCslcJwCa2qYd1y4KOZqtXqiPFUQ2yRuUMluvWQCOr0ckAGlVhUV93Mu1CXU8PdqTQPNGZPpb7AEDyCYWhpt/CWlz0def7o1GhWbC19Z3NMdvfDvoyaL//77cUjjqKVYQ9EeDdRnKujj0AzSV8gLgK4rmmf1zHiYOpfXflyghxWc3O/i8tlF7ruKbS7pSvcyBvzgmW0zojZnattdoKiIRNZAeZ+v4cqDKkBpMtlrKJc7yL7nYOEdXiTaVQ/3iFpZm0J+U3pOewsYbX6Vmkvb5wTYHJzNQFu6E1QyYjiibRSospNgRRlzHXXAUgL7nK0JR8PKhen4ID1ZVRtL+r0RzGnPiMvSyt4fAbkP06nKikuZBeTD9isLY793XG6lj4PCTAHWZE4DzZAXoEppAdCqd810kpav9OrbShFpEhKvDcsDxTRixwjTxsaTv+N4DObYuJThoR6SR1qmiQNArmgx3glNUbZdYQ4i5zdLU5B8v02idAwRFWEbH8oBzyKxlwslOeEwq0+WisDvxJCAtPpWeZvWL0v/u6MOPkAFoN9Ml4dLIOFcrSaifblfaCVXajS7QjcvS2YLuLzQUjjb2R0H0ZnSCVjS+FgiXhTWrEr/8VB8VsMcOZ6Vz+ZrcT5wjWpP/Il19q8g0xB260B4x5O1xocMjTertociASRirLkg2jYH4EcUMN/fFZRLTVJuFZQ6rVLpsK+eHzgyIrS2Fz/YZORdSet6zaFzERzEhrWSrL6mJ878vl4b92CGoy6op7m7B/GBsrvEwizCPR039ZaDsMahg==} 
步骤13: 用POST方式获得这些返回数据,如果签名方式设置的是0001(RSA)时,需要先对这些数据中的参数notify_data做解密;如果签名方式设置的是MD5,因为直接返回明文,所以不需要解密。 
{service=alipay.wap.trade.create.direct, sign=MK1Q0vAATXdJTiBOxCh3XLulQDJgvYD7tU3doIpYuZEf/JCMi6MubmanJbJ9TdSbGK3iM7anDxwdflM9DVaPuc7ZdqS0Xp4N+YGUXzlcm3al2lcAMjh7ttAsPy4cia4kKWJo0ATZZeIP8jkZG2L46nBeElqo3ZcbeMQklFhu6ak=, sec_id=0001, v=1.0, notify_data=<notify><payment_type>1</payment_type><subject>测试</subject><trade_no>2013061435574635</trade_no><buyer_email>xxxxxxx@xx.com</buyer_email><gmt_create>2013-06-14 17:38:45</gmt_create><notify_type>trade_status_sync</notify_type><quantity>1</quantity><out_trade_no>cs201306140001</out_trade_no><notify_time>2013-06-14 17:38:54</notify_time><seller_id>2088501624560335</seller_id><trade_status>TRADE_FINISHED</trade_status><is_total_fee_adjust>N</is_total_fee_adjust><total_fee>0.01</total_fee><gmt_payment>2013-06-14 17:38:54</gmt_payment><seller_email>alipayrisk10@alipay.com</seller_email><gmt_close>2013-06-14 17:38:54</gmt_close><price>0.01</price><buyer_id>2088002396712354</buyer_id><notify_id>be3e931aa1cc2147d7fa5b6bf569b6153y</notify_id><use_coupon>N</use_coupon></notify>} 
notify_url异步通知的签名验证规律与call_back_url不同,商户只需要顺序获取支付宝的返回数据,不需要对这些参数排序。因此,直接把数组$_POST转变成待签名字符串。 
service=alipay.wap.trade.create.direct&v=1.0&sec_id=0001&notify_data=<notify><payment_type>1</payment_type><subject>测试</subject><trade_no>2013061435574635</trade_no><buyer_email>xxxxxxx@xx.com</buyer_email><gmt_create>2013-06-14 17:38:45</gmt_create><notify_type>trade_status_sync</notify_type><quantity>1</quantity><out_trade_no>cs201306140001</out_trade_no><notify_time>2013-06-14 17:38:54</notify_time><seller_id>2088501624560335</seller_id><trade_status>TRADE_FINISHED</trade_status><is_total_fee_adjust>N</is_total_fee_adjust><total_fee>0.01</total_fee><gmt_payment>2013-06-14 17:38:54</gmt_payment><seller_email>alipayrisk10@alipay.com</seller_email><gmt_close>2013-06-14 17:38:54</gmt_close><price>0.01</price><buyer_id>2088002396712354</buyer_id><notify_id>be3e931aa1cc2147d7fa5b6bf569b6153y</notify_id><use_coupon>N</use_coupon></notify> 
接着对该字符串做签名验证(这一系列动作调用AlipayNotify类中的verifyNotify函数),得到布尔类型的验证结果,完成notify_url页面文件的验证动作。 
步骤14: 在notify_url页面文件中,参数notify_data是XML结构的字符串,需要先XML解析,再获取需要的子节点数据。
3. ASP.NET(C#) 
步骤1:商户为手机网页即时到账授权接口(alipay.wap.trade.create.direct)的请求参数配置好数据后,组装进数组sParaTempToken中,再对该数组做空值过滤(调用AlipayCore类中的FilterPara函数)。 
{[partner, 2088101568358171]} 
{[_input_charset, utf-8]} 
{[sec_id, 0001]} 
{[service, alipay.wap.trade.create.direct]} 
{[format, xml]} 
{[v, 2.0]} 
{[req_id, 201306170002]} 
{[req_data, <direct_trade_create_req><notify_url>http://www.xxx.com/WS_WAP_PAYWAP-CSHARP/notify_url.aspx</notify_url><call_back_url>http://127.0.0.1:48034/WS_WAP_PAYWAP-CSHARP/call_back_url.aspx</call_back_url><seller_account_name>alipayrisk10@alipay.com</seller_account_name><out_trade_no>cs201306170002</out_trade_no><subject>测试</subject><total_fee>0.01</total_fee></direct_trade_create_req>]} 
步骤2: 对该数组做参数名首字母升序的排序动作(调用AlipayCore类中的SortPara函数),排序规则请参见“3 技术接入规则”中的“请求时签名逻辑”,此时得到的数组为待签名数组。 
{[_input_charset, utf-8]} 
{[format, xml]} 
{[partner, 2088101568358171]} 
{[req_data, <direct_trade_create_req><notify_url>http://www.xxx.com/WS_WAP_PAYWAP-CSHARP/notify_url.aspx</notify_url><call_back_url>http://127.0.0.1:48034/WS_WAP_PAYWAP-CSHARP/call_back_url.aspx</call_back_url><seller_account_name>alipayrisk10@alipay.com</seller_account_name><out_trade_no>cs201306170002</out_trade_no><subject>测试
</subject><total_fee>0.01</total_fee></direct_trade_create_req>]} 
{[req_id, 201306170002]} 
{[sec_id, 0001]} 
{[service, alipay.wap.trade.create.direct]} 
{[v, 2.0]} 
步骤3: 把待签名数组转变成待签名字符串。 
_input_charset=utf-8&format=xml&partner=2088101568358171&req_data=<direct_trade_create_req><notify_url>http://www.xxx.com/WS_WAP_PAYWAP-CSHARP/notify_url.aspx</notify_url><call_back_url>http://127.0.0.1:48034/WS_WAP_PAYWAP-CSHARP/call_back_url.aspx</call_back_url><seller_account_name>alipayrisk10@alipay.com</seller_account_name><out_trade_no>cs201306170002</out_trade_no><subject>测试</subject><total_fee>0.01</total_fee></direct_trade_create_req>&req_id=201306170002&sec_id=0001&service=alipay.wap.trade.create.direct&v=2.0 
并对该字符串做签名(调用AlipaySubmit类中的BuildRequestMysign函数),转变规则请参见“3 技术接入规则”中的“请求时签名逻辑”。 
xO/eAP4pFusEveZmaw2mgCEoQGxDqkFZ+AF8wI1U52OGASs48O/efTZLn9Cr0tF9tDJQ+hwlcNj+F4/Hx+w6v35c0oE3F1Eab/Z2wKAirIYVh/HagumS34aa6t7lJb21YFIshu1YgoqWfwakQ/fzdcwVncW7jJQIvMsIgAhEJ8I= 
步骤4: 把签名结果赋值给参数sign,并把sign加入之前的待签名数组中,此时得到的便是要请求给支付宝的全部数据。 
{[_input_charset, utf-8]} 
{[format, xml]} 
{[partner, 2088101568358171]} 
{[req_data, <direct_trade_create_req><notify_url>http://www.xxx.com/WS_WAP_PAYWAP-CSHARP/notify_url.aspx</notify_url><call_back_url>http://127.0.0.1:48034/WS_WAP_PAYWAP-CSHARP/call_back_url.aspx</call_back_url><seller_account_name>alipayrisk10@alipay.com</seller_account_name><out_trade_no>cs201306170002</out_trade_no><subject>测试</subject><total_fee>0.01</total_fee></direct_trade_create_req>]} 
{[req_id, 201306170002]} 
{[sec_id, 0001]} 
{[service, alipay.wap.trade.create.direct]} 
{[v, 2.0]} 
{[sign, xO/eAP4pFusEveZmaw2mgCEoQGxDqkFZ+AF8wI1U52OGASs48O/efTZLn9Cr0tF9tDJQ+hwlcNj+F4/Hx+w6v35c0oE3F1Eab/Z2wKAirIYVh/HagumS34aa6t7lJb21YFIshu1YgoqWfwakQ/fzdcwVncW7jJQIvMsIgAhEJ8I=]}
步骤5: 模拟远程HTTP协议请求支付宝(调用AlipaySubmit类中的BuildRequest(string GATEWAY_NEW, Dictionary<string, string> sParaTemp)函数),得到支付宝的处理结果,字符串文本格式。 
res_data=KzTV7n3JHKMmaxc9jObz8FqT9PO8MQw5kqX8uqO4fGwvNIDHNngLdEig%2FaN4A97i0nRviLzoutVSojBIM%2BRECev5UR6aqhME%2Bei%2BX8LYf9sZaE1V3o2oMz3BnubFOcnozWBgXyDaA2fzeU1YxT9TL4BLaDEJ0gZB5upjpMeiyO%2Bil9068gl11ojNbJE3jeGtgqp%2FXTSXmFZ0x7DYefB1XYWmzETLywMkKdwlhnYIDrTLHLj4wdMTmsQS%2BxbTD2egERafRFD3DtPDkO6j7pRfHcJBtoEtC%2Fg4Zj2FD58ADEGLKb7oAkMU6ado091la%2FvAzH3gZtElHAs%2BdYglI%2FUIBw%3D%3D&service=alipay.wap.trade.create.direct&sec_id=0001&partner=2088101568358171&req_id=201306170002&sign=oo4ShGc1fndnYiI2OJzclNSQcfspEzoQchrYS8fhiaAzddE31ra%2Ffq7xOm9RCzDTfgyO3Sl8pUcAWY%2B4BYPrxMF5GPVv2IZDY%2FN%2FxQjTwEPrkQYazOtimzB1qRTA%2FUrOrEejEyMUqN2XXrMwl4%2FavdFjPpBAsCsF7KFJOL%2FB7H4%3D&v=2.0 
步骤6: 对该结果做URLDECODE解码工作(调用urldecode函数)。 
res_data=KzTV7n3JHKMmaxc9jObz8FqT9PO8MQw5kqX8uqO4fGwvNIDHNngLdEig/aN4A97i0nRviLzoutVSojBIM+RECev5UR6aqhME+ei+X8LYf9sZaE1V3o2oMz3BnubFOcnozWBgXyDaA2fzeU1YxT9TL4BLaDEJ0gZB5upjpMeiyO+il9068gl11ojNbJE3jeGtgqp/XTSXmFZ0x7DYefB1XYWmzETLywMkKdwlhnYIDrTLHLj4wdMTmsQS+xbTD2egERafRFD3DtPDkO6j7pRfHcJBtoEtC/g4Zj2FD58ADEGLKb7oAkMU6ado091la/vAzH3gZtElHAs+dYglI/UIBw==&service=alipay.wap.trade.create.direct&sec_id=0001&partner=2088101568358171&req_id=201306170002&sign=oo4ShGc1fndnYiI2OJzclNSQcfspEzoQchrYS8fhiaAzddE31ra/fq7xOm9RCzDTfgyO3Sl8pUcAWY+4BYPrxMF5GPVv2IZDY/N/xQjTwEPrkQYazOtimzB1qRTA/UrOrEejEyMUqN2XXrMwl4/avdFjPpBAsCsF7KFJOL/B7H4=&v=2.0 
步骤7: 对这串结果字符串做字符串切割,获取返回参数的信息。其中,如果签名方式设置的是0001(RSA),那么还需要对这结果中的返回参数res_data做解密工作;如果签名方式设置的MD5,则结果中的返回参数res_data直接显示明文。 
res_data=<?xml version="1.0" encoding="utf-8"?><direct_trade_create_res><request_token>201306179d4c458a00e26aca863b4dac3cc2bfd3</request_token></direct_trade_create_res>&service=alipay.wap.trade.create.direct&sec_id=0001&partner=2088101568358171&req_id=201306170002&sign=oo4ShGc1fndnYiI2OJzclNSQcfspEzoQchrYS8fhiaAzddE31ra/fq7xOm9RCzDTfgyO3Sl8pUcAWY+4BYPrxMF5GPVv2IZDY/N/xQjTwEPrkQYazOtimzB1qRTA/UrOrEejEyMUqN2XXrMwl4/avdFjPpBAsCsF7KFJOL/B7H4=&v=2.0 
接着把XML结构的res_data的值做XML解析,从中获取子节点request_token的值(这一系列过程需调用AlipaySubmit类中的ParseResponse函数),这个值就是授权令牌。 
201306179d4c458a00e26aca863b4dac3cc2bfd3
步骤8: 商户为手机网页即时到账交易接口(alipay.wap.auth.authandexecute)的请求参数配置好数据后,与步骤一、二、三、四同理,把数据组装进数组sParaTemp中。 
{[partner, 2088101568358171]} 
{[_input_charset, utf-8]} 
{[sec_id, 0001]} 
{[service, alipay.wap.auth.authAndExecute]} 
{[format, xml]} 
{[v, 2.0]} 
{[req_data, <auth_and_execute_req><request_token>201306179d4c458a00e26aca863b4dac3cc2bfd3</request_token></auth_and_execute_req>]} 
对该数组做空值过滤(调用AlipaySubmit类中的FilterPara函数),对该数组做参数名首字母升序的排序动作(调用AlipaySubmit类中的SortPara函数),把待签名数组转变成待签名字符串,对该字符串做签名(调用AlipaySubmit类中的BuildRequestMysign函数),把签名结果赋值给参数sign,并把sign加入之前的待签名数组中,此时得到的便是要请求给支付宝的全部数据。 
{[_input_charset, utf-8]} 
{[format, xml]} 
{[partner, 2088101568358171]} 
{[req_data, <auth_and_execute_req><request_token>201306179d4c458a00e26aca863b4dac3cc2bfd3</request_token></auth_and_execute_req>]} 
{[sec_id, 0001]} 
{[service, alipay.wap.auth.authAndExecute]} 
{[v, 2.0]} 
{[sign, yB+DrSNb0zvnpzgzid7h/J45V0xbNsOSr7q0/qpX4jElmSCDxUl6ouwc3T39XwCy1nwil/SGx0PiwjN1AKHy+4zADjQVmDMCR28b9skLrVM/Gw5cU35FEgvlTIK+UZ85t/5m4KVby9CIqeI+B6ziXM4zQUxsNTU7AjRGi/kU3Es=]} 
步骤9: 以GET方式,请求支付宝(调用AlipaySubmit类中的BuildRequest(string GATEWAY_NEW, Dictionary<string, string> sParaTemp, string strMethod, string strButtonValue)函数),此时商户的页面会自动跳转至支付宝收银台。
 
图5-4 跳转至支付宝收银台
后面的动作全由买家在支付宝收银台中操作完成。 
步骤10: 当这笔交易被买家支付成功后支付宝收银台上显示该笔交易成功,并提示用户可返回商户网站。买家点击该功能按钮后,则当前界面会跳转回商户设置的call_back_url页面文件去,如果长时间没有点击,则当前支付宝收银台界面会自动跳转至商户call_back_url页面文件去。此时商户的call_back_url页面会收到一串带有处理结果数据的链接地址。
http://127.0.0.1:48034/WS_WAP_PAYWAP-CSHARP/call_back_url.aspx?out_trade_no=cs201306170002&request_token=requestToken&result=success&trade_no=2013061742035035&sign=vnXVWq91w87tmKdrtePYKnEJZmVhuUMeVCVv18HwU8ABmvKH48CLXRQjjAdU4y75WtR62HhEoNCLAnTkx1hxsVGOZwpSRx9DxdXwz1m1NozIOV%2BTN8V9l%2FQXEJj0dmlgd3UjHdxfAbMkFKFDznIfZwYSbhCAL2H4KwXdefLAGiw%3D&sign_type=0001 
步骤11: 用GET方式获得这些返回数据,与步骤一、二、三、四同理,对数组sPara(调用call_back_url页面中的GetRequestGet()函数)做空值过滤、参数名首字母升序的排序、待签名数组转变成待签名字符串。 
out_trade_no=cs201306170002&request_token=requestToken&result=success&trade_no=2013061742035035 
对该字符串做签名验证(这一系列动作为调用AlipayNotify类中的VerifyReturn函数完成),得到布尔类型的验证结果,完成call_back_url页面文件的验证动作。 
步骤12: 买家对一笔交易付款完成的同时,除了支付宝会触发页面跳转至call_back_url文件的同步通知动作,还会自动触发服务器异步通知页面文件(商户设置参数notify_url的值)。此时,商户的notify_url文件也会收到支付宝异步通知回来的数据。 
{service=alipay.wap.trade.create.direct, sign=eUHFymt6/MSGNDX8XcnD44IRKEXkx3mG5dk9hp39LYqmwO/WWf9+mldyljSkEXTo9wA2p8Tv9CR1NCTy9nMjHg19KWX8Rtrz2CIfoOvTsE8ttxaRzkQ8TBo/K3sHPERJmQZE2uW8RyXywMaRbRMC+90YATDqex6e7FCR0HQt4KI=, sec_id=0001, v=1.0, notify_data=iUtYE4ipOb+hpmw+lU1lDaLvTxusiNwV6LKDn6vSJLY5Pl2HaE9O9sqWfYXeh+oos6cOS3bB5fkmDqJeDUXHH5oJFttkIosZAj1W0QjROcpF3/j4fx+15DsbGMwXfF4qeBAGA2PdAlwpdZK+krJeAyNn7jNUc2STWVS7ZBRBs0SV8meE1TrjQf5zcQMmoBhLRot6/9iiZyoeBYh2s4JA2u+1HakCLEFproN288teBwA6X/apKe+AauHCYnrUMSO8Wjhz7vaQlkWkQ7tq5rcT6kPGkmwhWvhVylDYXB51SD0KI/17qHm4z8hWiXzArl22P1r6TwP87WBmnAudPfAM5Jj0Uq1UeCE2LpG+8Z2IzKPe1OTLJhtcrjza3q/vFj/J1lT1pq2PM9eDs9p0aV3KuCH3+1Ms7oMqq8IjeJdExYFIa002NxCTkc7VWyMnwHWYCSGC+vPUR9KeZKtWvMpHpJRIJegXiF2LWRU0XrXfwnguiOpWVmSW3XGemedxRsIG0AOyNSLAfq+9Wqvcbz6lcwzskDcLwwOHo2Qo9sRWB7wEytcJwGstXHbXLXR3GXvIkogD7slYd3mvqsczeTPCJ7KeftQP0yGi6gb3wM7igDkIc2tvvdrwQqg7SBjOOU1mUwZbMXYb4ErlFNELHw+5/Tu/qlQcaSma/WWiOL1z0yj1HnfF/PhdWJ/ohlDCMg5iwPW4Xa1gJx+SEGz/lr9ZFbSvCIzzVFgXN+v+26kNb/VvM4dqfSUoj722AOv0fvkNA7qS0EZ7j0gv2L5IZMjibK7DwQ/SLgiQf9sALPWkSBoJfBdZ4k5vJXry4p3Uh2BHUeDckQzNaB3oQJVT8X+6h+8hpvZS5KpDRrq57odJEWqcWQ3tEozyANqL2XTea3tH3h9Fi3ZqmhNTazvdRMGXHLaOhMIg6kmo84aYbPMapv/5fyQdXrELZLiuZh9oxLTECqrHN1kx8BLSLp4ubpkent7NV2LgJbA+jZhE7pUH2vnND4b6XNpOOSha+3y6/kLCjj6cnxUhnwjUUdCCfzXTK1j1+RCS1+G89SR+f7q1NQy/LPK4qD/FVAmquCFMsDzwKNPfNJdxadiElAezivEP4q7ihjH2iNKm/7WJouYfWfYTYXAepa5OIZodJP1otQu1uheDmm1COKnUw9PW6rOQkNK41Weiej0fWqTLi19Fe9YbWagVXf4qJ74RhxLhoWso2JdQV3OPNjCXa5EXn8mRGsB8yQKtwZvZTgtjMB+BMcEa6Qqb74G3mFifyB1+ZCdGIBijK0eMPzyskyqdQG15wC152F5A2BnImIObQ4MgFFqY0gbjM1xzUcb/mhQ196sPP+Mv+25uw4CcJE+5FQW6ONx343MEcs8P+esaRlY2CH4uXiUBtjltzlcD3kpC4RobNzuCMb/NLROkx+mLKZJeID1SgBa1Shj7OzYqVYyyUEpdPfgLEgwFsCtBl3Tsf05yW19acFX2+fYQXk+/k5gs/pkCt2ol27Z4bcGDEOP4zPCd5KrHyvguyUDXWepc48} 
步骤13: 用POST方式获得这些返回数据,如果签名方式设置的是0001(RSA)时,需要先对这些数据中的参数notify_data做解密;如果签名方式设置的是MD5,因为直接返回明文,所以不需要解密。
{service=alipay.wap.trade.create.direct, sign=eUHFymt6/MSGNDX8XcnD44IRKEXkx3mG5dk9hp39LYqmwO/WWf9+mldyljSkEXTo9wA2p8Tv9CR1NCTy9nMjHg19KWX8Rtrz2CIfoOvTsE8ttxaRzkQ8TBo/K3sHPERJmQZE2uW8RyXywMaRbRMC+90YATDqex6e7FCR0HQt4KI=, sec_id=0001, v=1.0, notify_data=<notify><partner>2088101568358171</partner><payment_type>8</payment_type><subject>测试</subject><trade_no>2013061742035035</trade_no><buyer_email>xxxxxxx@xx.com</buyer_email><gmt_create>2013-06-17 20:12:35</gmt_create><notify_type>trade_status_sync</notify_type><quantity>1</quantity><out_trade_no>cs201306170002</out_trade_no><notify_time>2013-06-17 20:12:40</notify_time><seller_id>2088501624560335</seller_id><out_channel_type>BALANCE</out_channel_type><trade_status>TRADE_SUCCESS</trade_status><is_total_fee_adjust>N</is_total_fee_adjust><total_fee>0.01</total_fee><gmt_payment>2013-06-17 20:12:40</gmt_payment><seller_email>alipayrisk10@alipay.com</seller_email><price>0.01</price><buyer_id>2088002396712354</buyer_id><out_channel_amount>0.01</out_channel_amount><notify_id>c6936b49aa4422d63bf14bc507c535983y</notify_id><use_coupon>N</use_coupon></notify>} 
notify_url异步通知的签名验证规律与call_back_url不同,商户只需要顺序获取支付宝的返回数据,不需要对这些参数排序。因此,直接把数组sPara(调用notify_url页面中的GetRequestPost()函数)转变成待签名字符串。 
service=alipay.wap.trade.create.direct&v=1.0&sec_id=0001&notify_data=<notify><partner>2088101568358171</partner><payment_type>8</payment_type><subject>测试</subject><trade_no>2013061742035035</trade_no><buyer_email>xxxxxxx@xx.com</buyer_email><gmt_create>2013-06-17 20:12:35</gmt_create><notify_type>trade_status_sync</notify_type><quantity>1</quantity><out_trade_no>cs201306170002</out_trade_no><notify_time>2013-06-17 20:12:40</notify_time><seller_id>2088501624560335</seller_id><out_channel_type>BALANCE</out_channel_type><trade_status>TRADE_SUCCESS</trade_status><is_total_fee_adjust>N</is_total_fee_adjust><total_fee>0.01</total_fee><gmt_payment>2013-06-17 20:12:40</gmt_payment><seller_email>alipayrisk10@alipay.com</seller_email><price>0.01</price><buyer_id>2088002396712354</buyer_id><out_channel_amount>0.01</out_channel_amount><notify_id>c6936b49aa4422d63bf14bc507c535983y</notify_id><use_coupon>N</use_coupon></notify> 
接着对该字符串做签名验证(这一系列动作调用AlipayNotify类中的VerifyNotify函数),得到布尔类型的验证结果,完成notify_url页面文件的验证动作。 
步骤14: 在notify_url页面文件中,参数notify_data是XML结构的字符串,需要先XML解析,再获取需要的子节点数据。 
 
6 Testing flow rules
Table 6-1 testing flow rules
 
Steps Debugging contents Notes
Step 1: debug this interface independently on this computer 正常获取授权令牌 
模拟手机浏览器进行付款
页面跳转同步返回 Only configure the interface well. It shall not be put into the website project of the commercial user. 
Step 2: debug this interface independently on the server 正常获取授权令牌 
模拟手机浏览器进行付款
页面跳转同步返回 
服务器异步通知返回 Put into the server debugging after debugging this computer without error.  
Step 3: interface is integrated to website project - Make the connection and integration between the debugged interfaces and the business flows of commercial users’ website project.
Step4: debug the integrated website project on this computer The whole business operation flow
模拟手机浏览器进行付款
页面跳转同步返回 
Subsequent execution of business Debug the interfaces integrated to the website project on this computer 
Step 5: debug the integrated website project The whole business operation flow
使用手机浏览器进行付款
页面跳转同步返回 
服务器异步通知返回
Subsequent execution of business After the debugging on this computer is faultless, then put into server for debugging.
 
7 附录
7.1 如何获得PID与密钥 
步骤1: 使用签约支付宝账号登录“商家服务”平台中的“我的商家服务”(https://b.alipay.com/order/serviceIndex.htm)。 
 
图7-1 我的商家服务
步骤2: 在地址栏中输入https://mobiless.alipay.com/myproduct/my_order.htm,即可查看到签约支付宝账号、合作者身份ID(PID)的信息。
 
图7-2 查看签约支付宝账号等信息
步骤3: 点击<密钥管理>按钮,输入“支付密码”,点击“确认”,即可查看到各类型的私钥。 
 
图7-3 查看私钥
步骤4: 上传RSA类型的商户公钥,获得支付宝公钥。
 
图7-4获取支付宝公钥
步骤5: 保存支付宝账号、合作者身份ID(PID)、交易安全校验码(MD5)、交易安全校验码(RSA)中的支付宝公钥。 
7.2 RSA密钥生成与使用 
7.2.1 生成商户密钥 
1. 打开openssl密钥生成软件 
打开openssl文件夹下的bin文件夹,执行openssl.exe文件,如下图:
 
图7-5 执行openssl.exe文件
2. 生成RSA私钥 
输入“genrsa -out rsa_private_key.pem 1024”命令,回车后,在当前bin文件目录中会新增一个rsa_private_key.pem文件,其文件为原始的商户私钥(请妥善保存该文件,PHP开发语言中需要使用该文件),以下为命令正确执行截图:
 
图7-6 生成RSA私钥
3. 生成RSA公钥 
输入“rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem”命令回车后,在当前bin文件目录中会新增一个rsa_public_key.pem文件,其文件为原始的商户公钥(请妥善保存该文件,PHP开发语言中需要使用该文件),以下为命令正确执行截图:
 
图7-7 生成RSA公钥 
4. 生成PKCS8编码的私钥 
输入命令“pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt”并回车,当前界面中会直接显示出生成结果:
 
图7-8 生成PKCS8编码的私钥
右键点击openssl窗口上边边缘,选择“编辑→标记”,选中要复制的文字:
 
图7-9 选中要复制的文字 
此时继续右键点击openssl窗口上边边缘,选择“编辑→复制”,把复制的内容粘贴进一个新的记事本中,可随意命名,只要知道这个是PKCS8格式的私钥即可(请妥善保存该文件)。 
7.2.2 RSA密钥使用逻辑 
RSA密钥使用逻辑: 
商户在使用RSA签名方式的支付宝接口时,真正会用到的密钥是商户私钥与支付宝公钥。商户上传公钥给支付宝,支付宝把公钥给商户,是公钥互换的操作。这就使得商户使用自己的私钥做签名时,支付宝端会根据商户上传的公钥做验证签名。商户使用支付宝公钥做验证签名时,同理,也是因为支付宝用支付宝私钥做了签名。 
1. PHP开发语言使用方法 
key文件夹里面须存放.pem后缀名的商户私钥、支付宝公钥两个文件。 
商户的私钥 
– 必须保证只有一行文字,即:没有回车、换行、空格等; 
– 不需要对刚生成的(原始的)私钥做pkcs8编码;
– 不需要去掉去掉“-----BEGIN PUBLIC KEY-----”、“-----END PUBLIC KEY-----”;
– 简言之,只要维持刚生成出来的私钥的内容即可。 
支付宝公钥 
(1) 先用签约支付宝账号登录支付宝网站,再浏览器访问“https://ms.alipay.com/index.htm”,点击菜单栏“我的商家服务”,右侧点击“密钥管理”进入密钥管理页面,复制“交易安全校验码(RSA)”→“支付宝公钥”栏目下的整串信息到一个新的记事本中,命名为“alipay_public_key.txt”; 
(2) 去掉这串字符串中的回车、换行、空格,变成只有一行文字; 
(3) 在这串支付宝公钥字符串的头尾部分,分别增加“-----BEGIN PUBLIC KEY-----”、“-----END PUBLIC KEY-----”这两条文字; 
(4) 切割这串支付宝公钥字符串,切割后的格式与商户刚生成的公钥格式一致即可,如下图:
 
图7-10 支付宝公钥示意图
(5) 保存该记事本,并改变后缀名为.pem。 
2. JAVA和ASP.NET(C#)开发语言使用方法 
商户的私钥 
– 必须保证只有一行文字,即:没有回车、换行、空格等;
– 需对刚生成的(原始的)私钥做pkcs8编码;
– 编码完成后,复制该段私钥,并去掉该段里面的回车、换行、空格、“-----BEGIN RSA PRIVATE KEY-----”、“-----END RSA PRIVATE KEY-----”。 
支付宝公钥
(1) 先用签约支付宝账号登录支付宝网站,再浏览器访问“https://ms.alipay.com/index.htm”,点击菜单栏“我的商家服务”,右侧点击“密钥管理”进入密钥管理页面,复制“交易安全校验码(RSA)”→“支付宝公钥”栏目下的整串信息;
(2) 去掉这串字符串中的回车、换行、空格,必须保证只有一行文字。 
7.3 业务数据传递 
支付宝提供的业务参数为支付宝需要商户传递过来的数据要求。商户只需要根据自己的业务需求,在业务逻辑代码运行时把这些动态数据以赋值给变量的形式,再通过支付宝接口本身的接口逻辑,传递给支付宝系统,让支付宝系统可识别。 
举例说明,商户要把某笔订单的数据传递给支付宝。那么商户需要先根据支付宝的参数要求,从自己的下单系统中拿到付款总金额(total_fee)、商户的订单号(out_trade_no)、订单名称(subject)等数据,再把这些数据一个一个以值的形式赋给对应的变量。再通过代码逻辑,把变量组合及加工成一次可以发送给支付宝的请求。 
7.4 如何增加扩展业务参数 
注意: 
本章节以代码示例为例,来说明如何增加扩展业务参数,仅供参考。商户需要根据自身情况来编写扩展业务参数的代码。 
打开配置业务参数的页面文件,找到代码修改位置。 
1. JAVA修改流程 
alipayapi.jsp文件,在参数req_dataToken中的根节点<direct_trade_create_req>下新增子节点。举例,新增一个参数merchant_url,那么修改前后比较如下: 
修改前: 
String req_dataToken = "<direct_trade_create_req><notify_url>" + notify_url + "</notify_url><call_back_url>" + call_back_url + "</call_back_url><seller_account_name>" + seller_email + "</seller_account_name><out_trade_no>" + out_trade_no + "</out_trade_no><subject>" + subject + "</subject><total_fee>" + total_fee + "</total_fee></direct_trade_create_req>"; 
修改后: 
String req_dataToken = "<direct_trade_create_req><notify_url>" + notify_url + "</notify_url><call_back_url>" + call_back_url + 
"</call_back_url><seller_account_name>" + seller_email + "</seller_account_name><out_trade_no>" + out_trade_no + "</out_trade_no><subject>" + subject + "</subject><total_fee>" + total_fee + "</total_fee><merchant_url>" + merchant_url + "</merchant_url></direct_trade_create_req>"; 
merchant_url为新增的业务参数变量,需商户为其赋值。 
2. PHP修改流程 
alipayapi.php文件,在参数$req_data中的根节点<direct_trade_create_req>下新增子节点。举例,新增一个参数merchant_url,那么修改前后比较如下: 
修改前: 
$req_data = '<direct_trade_create_req><notify_url>' . $notify_url . '</notify_url><call_back_url>' . $call_back_url . '</call_back_url><seller_account_name>' . $seller_email . '</seller_account_name><out_trade_no>' . $out_trade_no . '</out_trade_no><subject>' . $subject . '</subject><total_fee>' . $total_fee . '</total_fee></direct_trade_create_req>'; 
修改后: 
$req_data = '<direct_trade_create_req><notify_url>' . $notify_url . '</notify_url><call_back_url>' . $call_back_url . '</call_back_url><seller_account_name>' . $seller_email . '</seller_account_name><out_trade_no>' . $out_trade_no . '</out_trade_no><subject>' . $subject . '</subject><total_fee>' . $total_fee . '</total_fee><merchant_url>'.$merchant_url.'</merchant_url></direct_trade_create_req>'; 
$merchant_url为新增的业务参数变量,需商户为其赋值。 
3. ASP.NET(C#)修改流程 
default.aspx.cs文件,在参数req_dataToken中的根节点<direct_trade_create_req>下新增子节点。举例,新增一个参数merchant_url,那么修改前后比较如下: 
修改前: 
string req_dataToken = "<direct_trade_create_req><notify_url>" + notify_url + "</notify_url><call_back_url>" + call_back_url + "</call_back_url><seller_account_name>" + seller_email + "</seller_account_name><out_trade_no>" + out_trade_no + "</out_trade_no><subject>" + subject + "</subject><total_fee>" + total_fee + "</total_fee></direct_trade_create_req>"; 
修改后: 
string req_dataToken = "<direct_trade_create_req><notify_url>" + notify_url + "</notify_url><call_back_url>" + call_back_url +
"</call_back_url><seller_account_name>" + seller_email + "</seller_account_name><out_trade_no>" + out_trade_no + "</out_trade_no><subject>" + subject + "</subject><total_fee>" + total_fee + "</total_fee><merchant_url>" + merchant_url + "</merchant_url></direct_trade_create_req>"; 
merchant_url为新增的业务参数变量,需商户为其赋值。 
7.5 如何更新订单 
在交易过程中,不仅需要实现能够让买家成功付款,而且还需要商户网站的订单数据与支付宝的交易管理中的交易信息保持一致。 
要使信息保持一致,就需要商户网站的程序开发、维护或管理的技术人员根据商户网站的业务流程做订单更新的程序开发。 
订单更新的业务程序代码放置位置 
参数notify_url对应的页面文件、参数return_url对应的页面文件,注释指定的位置。 
订单更新的页面文件如何被调用 
前提:参数notify_url、参数return_url有被正确设置。 
– 当买家付款完成时,当前界面会自动跳转到参数return_url对应的页面文件,此时return_url对应的页面文件则被启动; 
– 当该笔交易在支付宝交易管理中存在且交易状态改变时,支付宝会主动发送通知到参数notify_url对应的页面文件,此时参数notify_url对应的页面文件则被启动。 
如何能获得支付宝处理完成后的通知返回数据 
通知返回数据的参数详见技术文档通知返回参数列表。 
– 参数return_url对应的页面文件中获取参数方式是GET方式获取,如:request.querrystring("参数名")、$_GET['参数名'] 
– 参数notify_url对应的页面文件中获取参数方式是POST方式获取,如:request.form("参数名")、$_POST['参数名'] 
订单更新基本思想
通过代码示例中的验证之后,获取支付宝反馈数据,先根据这笔交易找到商户网站订单系统中对应的订单,再判断该笔订单是否已经做过处理,如果未做处理,那么按照商户网站的业务流程更新订单数据。

Unitrans世联翻译公司在您身边,离您近的翻译公司,心贴心的专业服务,专业的全球语言翻译与信息解决方案供应商,专业翻译机构品牌。无论在本地,国内还是海外,我们的专业、星级体贴服务,为您的事业加速!世联翻译公司在北京、上海、深圳等国际交往城市设有翻译基地,业务覆盖全国城市。每天有近百万字节的信息和贸易通过世联走向全球!积累了大量政商用户数据,翻译人才库数据,多语种语料库大数据。世联品牌和服务品质已得到政务防务和国际组织、跨国公司和大中型企业等近万用户的认可。 专业翻译公司,北京翻译公司,上海翻译公司,英文翻译,日文翻译,韩语翻译,翻译公司排行榜,翻译公司收费价格表,翻译公司收费标准,翻译公司北京,翻译公司上海。
  • “贵司提交的稿件专业词汇用词准确,语言表达流畅,排版规范, 且服务态度好。在贵司的帮助下,我司的编制周期得以缩短,稿件语言的表达质量得到很大提升”

    华东建筑设计研究总院

  • “我单位是一家总部位于丹麦的高科技企业,和世联翻译第一次接触,心中仍有着一定的犹豫,贵司专业的译员与高水准的服务,得到了国外合作伙伴的认可!”

    世万保制动器(上海)有限公司

  • “我公司是一家荷兰驻华分公司,主要致力于行为学研究软件、仪器和集成系统的开发和销售工作,所需翻译的英文说明书专业性强,翻译难度较大,贵司总能提供优质的服务。”

    诺达思(北京)信息技术有限责任公司

  • “为我司在东南亚地区的业务开拓提供小语种翻译服务中,翻译稿件格式美观整洁,能最大程度的还原原文的样式,同时翻译质量和速度也得到我司的肯定和好评!”

    上海大众

  • “在此之前,我们公司和其他翻译公司有过合作,但是翻译质量实在不敢恭维,所以当我认识刘颖洁以后,对她的专业性和贵公司翻译的质量非常满意,随即签署了长期合作合同。”

    银泰资源股份有限公司

  • “我行自2017年与世联翻译合作,合作过程中十分愉快。特别感谢Jasmine Liu, 态度热情亲切,有耐心,对我行提出的要求落实到位,体现了非常高的专业性。”

    南洋商业银行

  • “与我公司对接的世联翻译客服经理,可以及时对我们的要求进行反馈,也会尽量满足我们临时紧急的文件翻译要求。热情周到的服务给我们留下深刻印象!”

    黑龙江飞鹤乳业有限公司

  • “翻译金融行业文件各式各样版式复杂,试译多家翻译公司,后经过比价、比服务、比质量等流程下来,最终敲定了世联翻译。非常感谢你们提供的优质服务。”

    国金证券股份有限公司

  • “我司所需翻译的资料专业性强,涉及面广,翻译难度大,贵司总能提供优质的服务。在一次业主单位对完工资料质量的抽查中,我司因为俄文翻译质量过关而受到了好评。”

    中辰汇通科技有限责任公司

  • “我司在2014年与贵公司建立合作关系,贵公司的翻译服务质量高、速度快、态度好,赢得了我司各部门的一致好评。贵司经理工作认真踏实,特此致以诚挚的感谢!”

    新华联国际置地(马来西亚)有限公司

  • “我们需要的翻译人员,不论是笔译还是口译,都需要具有很强的专业性,贵公司的德文翻译稿件和现场的同声传译都得到了我公司和合作伙伴的充分肯定。”

    西马远东医疗投资管理有限公司

  • “在这5年中,世联翻译公司人员对工作的认真、负责、热情、周到深深的打动了我。不仅译件质量好,交稿时间及时,还能在我司资金周转紧张时给予体谅。”

    华润万东医疗装备股份有限公司

  • “我公司与世联翻译一直保持着长期合作关系,这家公司报价合理,质量可靠,效率又高。他们翻译的译文发到国外公司,对方也很认可。”

    北京世博达科技发展有限公司

  • “贵公司翻译的译文质量很高,语言表达流畅、排版格式规范、专业术语翻译到位、翻译的速度非常快、后期服务热情。我司翻译了大量的专业文件,经过长久合作,名副其实,值得信赖。”

    北京塞特雷特科技有限公司

  • “针对我们农业科研论文写作要求,尽量寻找专业对口的专家为我提供翻译服务,最后又按照学术期刊的要求,提供润色原稿和相关的证明文件。非常感谢世联翻译公司!”

    中国农科院

  • “世联的客服经理态度热情亲切,对我们提出的要求都落实到位,回答我们的问题也非常有耐心。译员十分专业,工作尽职尽责,获得与其共事的公司总部同事们的一致高度认可。”

    格莱姆公司

  • “我公司与马来西亚政府有相关业务往来,急需翻译项目报备材料。在经过对各个翻译公司的服务水平和质量的权衡下,我们选择了世联翻译公司。翻译很成功,公司领导非常满意。”

    北京韬盛科技发展有限公司

  • “客服经理能一贯热情负责的完成每一次翻译工作的组织及沟通。为客户与译员之间搭起顺畅的沟通桥梁。能协助我方建立专业词库,并向译员准确传达落实,准确及高效的完成统一风格。”

    HEURTEY PETROCHEM法国赫锑石化

  • “贵公司与我社对翻译项目进行了几次详细的会谈,期间公司负责人和廖小姐还亲自来我社拜访,对待工作热情,专业度高,我们双方达成了很好的共识。对贵公司的服务给予好评!”

    东华大学出版社

  • “非常感谢世联翻译!我们对此次缅甸语访谈翻译项目非常满意,世联在充分了解我司项目的翻译意图情况下,即高效又保质地完成了译文。”

    上海奥美广告有限公司

  • “在合作过程中,世联翻译保质、保量、及时的完成我们交给的翻译工作。客户经理工作积极,服务热情、周到,能全面的了解客户的需求,在此表示特别的感谢。”

    北京中唐电工程咨询有限公司

  • “我们通过图书翻译项目与你们相识乃至建立友谊,你们报价合理、服务细致、翻译质量可靠。请允许我们借此机会向你们表示衷心的感谢!”

    山东教育出版社

  • “很满意世联的翻译质量,交稿准时,中英互译都比较好,措辞和句式结构都比较地道,译文忠实于原文。TNC是一家国际环保组织,发给我们美国总部的同事后,他们反应也不错。”

    TNC大自然保护协会

  • “原英国首相布莱尔来访,需要非常专业的同声传译服务,因是第一次接触,心中仍有着一定的犹豫,但是贵司专业的译员与高水准的服务,给我们留下了非常深刻的印象。”

    北京师范大学壹基金公益研究院

  • “在与世联翻译合作期间,世联秉承着“上善若水、厚德载物”的文化理念,以上乘的品质和质量,信守对客户的承诺,出色地完成了我公司交予的翻译工作。”

    国科创新(北京)信息咨询中心

  • “由于项目要求时间相当紧凑,所以世联在保证质量的前提下,尽力按照时间完成任务。使我们在世博会俄罗斯馆日活动中准备充足,并受到一致好评。”

    北京华国之窗咨询有限公司

  • “贵公司针对客户需要,挑选优秀的译员承接项目,翻译过程客户随时查看中途稿,并且与客户沟通术语方面的知识,能够更准确的了解到客户的需求,确保稿件高质量。”

    日工建机(北京)国际进出口有限公司

15801211926

18017395793
点击添加微信

无需转接等回电