手机网页即时到账接口

生成待签名的字符串

需要参与签名的参数

  • 在请求参数列表中,除去sign参数外,其他需要使用到的参数皆是要签名的参数。
  • 在授权接口html返回参数列表中:正常返回的情况下,除去sign参数外,凡是返回回来的参数皆是要签名的参数;发生错误的情况下,不需要签名。
  • 在交易接口通知返回参数列表中,除去sign参数外,凡是通知返回回来的参数皆是要签名的参数。

生成待签名字符串

对于如下的参数数组:

  • 授权接口

    string[] parameters={
    "service=alipay.wap.trade.create.direct",
    "req_data=<direct_trade_create_req><subject>彩票</subject><out_trade_no>1282889603601</out_trade_no><total_fee>10.01</total_fee><seller_account_name>[email protected]</seller_account_name><call_back_url>http://www.yoursite.com/waptest0504/servlet/CallBack</call_back_url><notify_url>http://www.yoursite.com/waptest0504/servlet/NotifyReceiver</notify_url><out_user>123456789</out_user><merchant_url>http://www.yoursite.com</merchant_url><pay_expire>3600</pay_expire></direct_trade_create_req>",
    "partner=2088101000137799",
    "req_id=1282889689836",
    "sec_id=0001",
    "format=xml ",
    "v=2.0"
    };
    
  • 交易接口

    string[] parameters={
    "service=alipay.wap.auth.authAndExecute",
    "req_data=<auth_and_execute_req><request_token>201008309e298cf01c58146274208eda1e4cdf2b</request_token></auth_and_execute_req>",
    "partner=2088101000137799",
    "sec_id=0001",
    "format=xml",
    "v=2.0",
    };
    

    对数组里的每一个值从a到z的顺序排序,若遇到相同首字母,则看第二个字母,以此类推。

    排序完成之后,再把所有数组值以“&”字符连接起来,如:

  • 授权接口

    format=xml&partner=2088101000137799&req_data=彩票128288960360110.01[email protected]http://www.yoursite.com/waptest0504/servlet/CallBackhttp://www.yoursite.com/waptest0504/servlet/NotifyReceiver123456789http://www.yoursite.com3600&req_id=1282889689836&sec_id=0001&service=alipay.wap.trade.create.direct&v=2.0

  • 交易接口

    format=xml&partner=2088101000137799&req_data=201008309e298cf01c58146274208eda1e4cdf2b&sec_id=0001&service=alipay.wap.auth.authAndExecute&v=2.0

    这串字符串便是待签名字符串。

注意:

  • notify_url接受到的参数验签不要排序,只需要按照支付宝返回的参数顺序,组装字符串,然后验签,如支付宝异步通知POST方式返回的参数顺序如下:service=alipay.wap.trade.create.direct&v=1.0&sec_id=0001&notify_data=
    • 这条支付宝手机部和web明显不合
    • 手机部这个人明显时想整人玩,他给的顺序时sec_id->v,验证的时候顺序就变成v->sec_id
    • 也许他程序写的太复杂,一般人不感动,动了这个支付宝就塌了,
  • 没有值的参数无需传递,也无需包含到待签名数据中;
  • 签名时将字符转化成字节流时指定的字符集与_input_charset保持一致;
  • 如果传递了_input_charset参数,这个参数也应该包含在待签名数据中;
  • 根据HTTP协议要求,传递参数的值中如果存在特殊字符(如:&、@等),那么该值需要做URL Encoding,这样请求接收方才能接收到正确的参数值。这种情况下,待签名数据应该是原始值而不是encoding之后的值。例如:调用某接口需要对请求参数email进行数字签名,那么待签名数据应该是[email protected],而不是email=test%40msn.com。