• Server SDK
  • 准备工作

    开发者信息

    • appkey
    • appsecret
    • sellerid
    • 商户私钥prvKey
    • 平台公钥pubKey

    密钥说明

    • 密钥分为测试环境和正式环境两套,放在online和test两个目录下,两者不可混用,请注意区分
    • xxx_rsa_private_key.p8.java/py 包含了商户私钥信息的证书文件,为p8格式,适合java、python、.net使用;
    • xxx_rsa_private_key.pem.php 包含了商户私钥信息的证书文件,为pem格式,适合php使用;
    • touchlife_rsa_public_key.pem.java/py 平台公钥,用于验签,适合java、python、.net使用;
    • touchlife_rsa_public_key.pem.php 平台公钥,用于验签,适合php使用;

    引入开发包

    注意:请用源码引入方式进行引用

    import com.cootek.touchlife.ApiException;
    import com.cootek.touchlife.DefaultTouchlifeClient;
    import com.cootek.touchlife.TouchlifeClient;
    import com.cootek.touchlife.TouchlifeResponse;
    import com.cootek.touchlife.util.SecurityUtils;
    import com.cootek.touchlife.request.AccountUserProfileRequest;
    ......//request下的各接口,看需求引入
    import com.cootek.touchlife.response.AccountUserProfileResponse;
    ......//response下的各接口,看需求引入
    
    using Touchlife.Api;
    
    from touchlife import appinfo, setDefaultAppInfo
    from touchlife.api.UserProfileRequest import UserProfileRequest
    ......//api下的各接口,看需求引入
    
    include "TouchlifeSdk.php";
    

    配置开发者信息

    protected static String url = "http://open.cootekservice.com";            //请求触宝的后台网址
    protected static String appkey = "7168795595590513";                      //商户的appkey
    protected static String appsecret = "b4aa1d1819d34ab597c1b6bac9a404c4";   //商户appkey对应的appsecret
    protected static String sellerId = "9223229708085022";                    //商户的sellerId
    protected static String prvKey = "MIICdgIBADANBgkqhkiG...";               //商户私钥,字符串过长省略后部
    protected static String pubKey = "MIGfMA0GCSqGSIb3DQEB...";               //触宝平台公钥,字符串过长省略后部
    TouchlifeClient client = new DefaultTouchlifeClient(url, appkey, appsecret, sellerId, prvKey, pubKey);
    //初始化client
    
    static string serverUrl = "http://open.cootekservice.com";            //请求触宝的后台网址
    static string appKey = "7168795595590513";                            //商户的appkey
    static string appSecret = "b4aa1d1819d34ab597c1b6bac9a404c4";         //商户appkey对应的appsecret
    static string sellerID = "9223229708085022";                          //商户的sellerId
    static string prvKey = "MIICdwIBADANBgkq...";                         //商户私钥,字符串过长省略后部
    static string pubKey = "MIGfMA0GCSqGSIb3...";                         //触宝平台公钥,字符串过长省略后部
    DefaultTouchlifeClient client = new DefaultTouchlifeClient(serverUrl, appKey, appSecret, sellerID, prvKey, pubKey);
    //初始化client
    
    $client = new TouchlifeClient;
    //初始化client
    $client->connectUrl = "http://open.cootekservice.com";                    //请求触宝的后台网址
    $client->appkey = "7168795595590513";                                     //商户的appkey
    $client->appsecret = "b4aa1d1819d34ab597c1b6bac9a404c4";                  //商户appkey对应的appsecret
    $client->sellerId = "9223229708085022";                                   //商户的sellerId
    $client->prvKeyPath = "./demo_rsa_private_key.pem";                       //商户私钥,字符串过长省略后部
    $client->pubKeyPath = "./touchlife_rsa_public_key.pem";                   //触宝平台公钥,字符串过长省略后部
    
    HOST = "open.cootekservice.com"                                   //请求触宝的后台网址
    PORT = "80"                                                       //请求触宝后台地址端口号
    appkey = "7168795595590513"                                         //商户的appkey
    appsecret = "b4aa1d1819d34ab597c1b6bac9a404c4"                    //商户appkey对应的appsecret
    sellerId = "9223229708085022"                                     //商户的sellerId
    pubKey = """MIGfMA0GCSqGSI..."""                                  //商户私钥,字符串过长省略后部
    privKey = """MIICdwIBADANBgkq..."""                                 //触宝平台公钥,字符串过长省略后部
    
    setDefaultAppInfo(appkey, appsecret, privKey, pubKey, sellerId)
    //初始化client
    

    通用步骤

    1. 先设置好开发者信息
    2. 实例化请求或者返回的类
    3. 设置参数
    4. 调用HTTP请求方法,得到返回结果
    5. 读取返回结果

    具体的可参见下一个获取用户信息例子,各个请求和返回结果字段的说明,请参见API文档

    获取用户信息

    用户信息的获取,需要依靠前端JS通过js-sdk获取accessToken,作为参数请求服务商实现的接口,然后服务商后台拿着accessToken向触宝服务器请求,示例代码如下:

    TouchlifeClient client = new DefaultTouchlifeClient(url, appkey, appsecret, sellerId, prvKey, pubKey);
    AccountUserProfileRequest req = new AccountUserProfileRequest();
    req.setAccessToken("eyJ0b2tlbiI6ICI5Mzg3OGNhOC1jYzhjLTQ2NjYtOTRjYS0zOGRiZjJjMWMzMjUifQ=="); 
    AccountUserProfileResponse response;
    response = client.execute(req);
    System.out.println("userId:" + response.getUserId());
    System.out.println("phone:" + response.getPhone());
    
    DefaultTouchlifeClient client = new DefaultTouchlifeClient(serverUrl, appKey, appSecret, sellerID, prvKey, pubKey);
    string accessToken = "eyJ0b2tlbiI6ICJjYTAzOTgyNC05MjU4LTQxMTItYTBhMC0xNThkYTBlNzg5YTUifQ==";
    var request = new AccountUserProfileRequest(accessToken);
    var resp = client.Execute<AccountUserProfileResponse>(request);
    Console.WriteLine("body:" + resp.Body);
    Console.WriteLine("userId:" + resp.UserId);
    Console.WriteLine("phone:" + resp.phone);
    
    user_profile = UserProfileRequest(HOST, PORT)
    user_profile.accessToken = 'eyJ0b2tlbiI6ICJjYTAzOTgyNC05MjU4LTQxMTItYTBhMC0xNThkYTBlNzg5YTUifQ=='
    res = user_profile.getResponse()
    print res.get('userId')
    print res.get('phone')
    
    $req = new AccountUserProfileRequest;
    $req->setAccessToken("eyJ0b2tlbiI6ICJjYTAzOTgyNC05MjU4LTQxMTItYTBhMC0xNThkYTBlNzg5YTUifQ==");
    $resp = $client->execute($req);
    echo "<br>" . "userId:" . $resp["userId"];
    echo "<br>" . "phone:" . $resp["phone"];
    

    支付

    请求

    TouchlifeClient client = new DefaultTouchlifeClient(url, appkey, appsecret, sellerId, prvKey, pubKey);
    TradePayCreateRequest req = new TradePayCreateRequest();
    req.setAccessToken("eyJ0b2tlbiI6ImZhNzI3N2EwLTkzZDctNGNiNS04M2UwLWU5MGQxOWUyN2Y4NCIsImV0b2tlbiI6IiJ9")
    req.setUserId("7963331065175620093");
    req.setNotifyUrl("http://server.com/pay/callbak"); 
    req.setTradeNo("238974128394"); 
    req.setTradeService("com.company.product"); 
    req.setTradeName("触宝-话费充值"); 
    req.setTradeDesc("触宝-话费充值-100元");
    req.setTotalFee(9980);
    req.setExpireTime(new Date(System.currentTimeMillis())); 
    req.setAttach("238974128394");
    req.setTradeStr("eyJwYXltZW50VHlwZSI6ICJ3ZWlwYXkifQ==");
    TradePayCreateResponse response;
    response = client.execute(req);
    System.out.println("transactionId:" + response.getTransactionId());
    System.out.println("tradeStatus:" + response.getTradeStatus());
    System.out.println("payStr:" + response.getPayStr());
    
    accessToken = "eyJ0b2tlbiI6ImZhNzI3N2EwLTkzZDctNGNiNS04M2UwLWU5MGQxOWUyN2Y4NCIsImV0b2tlbiI6IiJ9"
    var request = new TradePayCreateRequest(accessToken);
    request.UserId = "7963331065175620093";
    request.NotifyUrl = "http://server.com/pay/callbak";
    request.TradeNo =  "238974128394";
    request.TradeService = "com.company.product";
    request.TradeName = "触宝-话费充值";
    request.TradeDesc = "触宝-话费充值-100元";
    request.TotalFee = 9980;
    request.ExpireTime = DateTime.Now;
    request.Attach = "238974128394";
    request.TradeStr = "eyJwYXltZW50VHlwZSI6ICJ3ZWlwYXkifQ==";
    var resp = client.Execute<TradePayCreateResponse>(request);
    Console.WriteLine("body:" + resp.Body);
    Console.WriteLine("TransactionId:" + resp.TransactionId);
    Console.WriteLine("TradeStatus:" + resp.TradeStatus);
    Console.WriteLine("PayStr:" + resp.Paystr);
    
    pay_create = OrderCreateRequest(HOST, PORT)
    pay_create.accessToken = "eyJ0b2tlbiI6ImZhNzI3N2EwLTkzZDctNGNiNS04M2UwLWU5MGQxOWUyN2Y4NCIsImV0b2tlbiI6IiJ9"
    pay_create.userId = "7963331065175620093"
    pay_create.notifyUrl = "http://server.com/pay/callbak"
    pay_create.tradeNo = "238974128394"
    pay_create.tradeService = "com.company.product"
    pay_create.tradeName = "触宝-话费充值"
    pay_create.tradeDesc = "触宝-话费充值-100元"
    pay_create.totalFee = "9980"
    pay_create.expireTime = "201512310000";
    pay_create.attach = "238974128394"
    pay_create.tradeStr = "eyJwYXltZW50VHlwZSI6ICJ3ZWlwYXkifQ=="
    res = pay_create.getResponse()
    print 'transactionId:' + res.get('transactionId')
    print 'tradeStatus:' + res.get('tradeStatus')
    print 'payStr:' + res.get('payStr')
    
    $req = new TradePayCreateRequest;
    $req->setAccessToken("eyJ0b2tlbiI6ImZhNzI3N2EwLTkzZDctNGNiNS04M2UwLWU5MGQxOWUyN2Y4NCIsImV0b2tlbiI6IiJ9");
    $req->setUserId("7963331065175620093");
    $req->setNotifyUrl("http://server.com/pay/callbak");
    $req->setTradeNo("238974128394");
    $req->setTradeService("com.company.product");
    $req->setTradeName("触宝-话费充值");
    $req->setTradeDesc("触宝-话费充值-100元");
    $req->setTotalFee(9980);
    $req->setExpireTime("");
    $req->setAttach("238974128394");
    $req->setTradeStr("eyJwYXltZW50VHlwZSI6ICJ3ZWlwYXkifQ==");
    $resp = $client->execute($req);
    echo "<br>" . "transactionId:" . $resp["transactionId"];
    echo "<br>" . "tradeStatus:" . $resp["tradeStatus"];
    echo "<br>" . "payStr:" . $resp["payStr"];;
    

    异步通知

    TradePayResultResponse response = new TradePayResultResponse();
    //获取到异步通知请求body
    response.setBody("{\"tradeSuccessTime\": \"20150709144851\", \"userId\": \"18413076065685074192\", \"sign\": \"aMGgWQ4ZNJ/SJ+gdw56emUiuFNJHhvteozdwrrDLYJ/fMsw9Bm3NUL/jbazpmWqr94nexBryemKRlR63kLt8y7hoKLm11qPNPSJ/ypycrh71wF1/tlLklqcIKAzT49uzeiE5IIp1QtYVwxOt3z0YQVvxA9+VOu3ZybffbmL7eyY=\", \"result\": \"SUCCESS\", \"tradeNo\": \"1158617\", \"notifyTime\": \"20150709144852\", \"tradeService\": \"com.lyancoffee.coffee\", \"tradeCreateTime\": \"20150709144838\", \"charset\": \"UTF-8\", \"attach\": \"\", \"tradeName\": \"\u5496\u5561\u996e\u54c1\u5916\u5356\", \"sellerId\": \"9223229708085022\", \"tradeStatus\": \"TRADE_SUCCESS\", \"tradeDesc\": \"\u62b9\u8336\u661f\u51b0\u4e50\uff08\u65e0\u5496\u5561\u56e0\uff09(\u8d85\u5927\u676f)*1 \", \"totalFee\": 3800, \"timestamp\": 1436424532, \"paymentType\": \"alipay\", \"cashFee\": 3800, \"appkey\": \"7168795595590413\", \"settleFee\": 3800, \"signType\": \"RSA\", \"apiVersion\": \"1.1\", \"transactionId\": \"354cbd6e-5520-4cfb-8a55-e0e4d857f904\", \"notifyId\": \"5d63fb90-f907-4f24-bd5c-80417d5a6816\"}");
    assert(SecurityUtils.verifySign(response.getParams(), appsecret, pubKey)); //进行验证签名等操作
    System.out.println("paymentType:" + response.getPaymentType());
    System.out.println("tradeNo:" + response.getTradeNo());
    System.out.println("tradeService:" + response.getTradeService());
    System.out.println("tradeName:" + response.getTradeName());
    System.out.println("tradeDesc:" + response.getTradeDesc());
    System.out.println("totalFee:" + response.getTotalFee());
    System.out.println("cashFee:" + response.getCashFee());
    System.out.println("settleFee:" + response.getSettleFee());
    System.out.println("transactionId:" + response.getTransactionId());
    System.out.println("notifyTime:" + response.getNotifyTime().toString());
    System.out.println("notifyId:" + response.getNotifyId());
    System.out.println("tradeCreateTime:" + response.getTradeCreateTime().toString());
    if (response.getTradeSuccessTime() != null) {
        System.out.println("tradeSuccessTime:" + response.getTradeSuccessTime().toString());
    }
    System.out.println("tradeStatus:" + response.getTradeStatus());
    if (response.getAttach() == null) {
        System.out.println("attach:" + response.getAttach());
    }
    
    TradePayResultResponse response = new TradePayResultResponse();
     //获取到异步通知请求body
    response.Body = "{\"userId\": \"9113011628065526464\", \"sign\": \"\", \"result\": \"SUCCESS\", \"tradeNo\": \"No_1434041804\", \"notifyTime\": \"20150612005659\", \"tradeService\": \"sampleService\", \"tradeCreateTime\": \"20150612005644\", \"charset\": \"UTF-8\", \"attach\": null, \"tradeName\": \"sampleTradeName\", \"sellerId\": \"1253748780192040\", \"tradeStatus\": \"TRADE_SUCCESS\", \"tradeDesc\": \"desc\", \"totalFee\": 0.01, \"appKey\": \"31415926\", \"timestamp\": 1434041819, \"tradeSuccessTime\": \"20150612005800\", \"paymentType\": \"alipay\", \"cashFee\": 0.01, \"settleFee\": 0.01, \"signType\": \"RSA\", \"apiVersion\": \"1.1\", \"notifyId\": \"782f07d3-f8c4-4af2-9eb7-3fd022a39d4e\"}";
    response.ParseFrom();
    if (SecurityUtils.VerifySign(response.Parameters, appSecret, "touchlife_rsa_public_key.pem")) //进行验证签名等操作
    {
        Console.WriteLine("TransactionId:" + response.TransactionId);
        Console.WriteLine("TradeStatus:" + response.TradeStatus);
        Console.WriteLine("PayStr:" + response.PayStr);
    }
    
    //TODO
    
     //获取到异步通知请求body
    $body = "{\"tradeSuccessTime\": \"20150709144851\", \"userId\": \"18413076065685074192\", \"sign\": \"aMGgWQ4ZNJ/SJ+gdw56emUiuFNJHhvteozdwrrDLYJ/fMsw9Bm3NUL/jbazpmWqr94nexBryemKRlR63kLt8y7hoKLm11qPNPSJ/ypycrh71wF1/tlLklqcIKAzT49uzeiE5IIp1QtYVwxOt3z0YQVvxA9+VOu3ZybffbmL7eyY=\", \"result\": \"SUCCESS\", \"tradeNo\": \"1158617\", \"notifyTime\": \"20150709144852\", \"tradeService\": \"com.lyancoffee.coffee\", \"tradeCreateTime\": \"20150709144838\", \"charset\": \"UTF-8\", \"attach\": \"\", \"tradeName\": \"\u5496\u5561\u996e\u54c1\u5916\u5356\", \"sellerId\": \"9223229708085022\", \"tradeStatus\": \"TRADE_SUCCESS\", \"tradeDesc\": \"\u62b9\u8336\u661f\u51b0\u4e50\uff08\u65e0\u5496\u5561\u56e0\uff09(\u8d85\u5927\u676f)*1 \", \"totalFee\": 3800, \"timestamp\": 1436424532, \"paymentType\": \"alipay\", \"cashFee\": 3800, \"appkey\": \"7168795595590413\", \"settleFee\": 3800, \"signType\": \"RSA\", \"apiVersion\": \"1.1\", \"transactionId\": \"354cbd6e-5520-4cfb-8a55-e0e4d857f904\", \"notifyId\": \"5d63fb90-f907-4f24-bd5c-80417d5a6816\"}"
    $resp = $client->onResponse($body); //进行验证签名等操作
    echo "<br>" . "paymentType:" . $resp["paymentType"];
    echo "<br>" . "tradeNo:" . $resp["tradeNo"];
    echo "<br>" . "tradeService:" . $resp["tradeService"];;
    echo "<br>" . "tradeDesc:" . $resp["tradeDesc"];;
    echo "<br>" . "totalFee:" . $resp["totalFee"];;
    echo "<br>" . "cashFee:" . $resp["cashFee"];;
    echo "<br>" . "settleFee:" . $resp["settleFee"];;
    echo "<br>" . "notifyTime:" . $resp["notifyTime"];;
    echo "<br>" . "notifyId:" . $resp["notifyId"];;
    echo "<br>" . "tradeCreateTime:" . $resp["tradeCreateTime"];;
    echo "<br>" . "tradeSuccessTime:" . $resp["tradeSuccessTime"];;
    echo "<br>" . "tradeStatus:" . $resp["tradeStatus"];
    echo "<br>" . "attach:" . $resp["attach"];;
    

    退款

    请求

    TouchlifeClient client = new DefaultTouchlifeClient(url, appkey, appsecret, sellerId, prvKey, pubKey);
    TradeRefundApplyRequest req = new TradeRefundApplyRequest();
    req.setUserId("7963331065175620093");
    req.setNotifyUrl("http://server.com/refund/callback");
    req.setTransactionId("fcfc39e1-ba18-4053-8955-ea692daccc70");
    req.setRefundNo("238974128394");
    req.setTotalFee(9980);
    req.setCashFee(9980);
    req.setRefundFee(9980);
    TradeRefundApplyResponse response;
    response = client.execute(req);
    System.out.println("refundId:" + response.getRefundId());
    System.out.println("refundStatus:" + response.getRefundStatus());
    
    DefaultTouchlifeClient client = new DefaultTouchlifeClient(serverUrl, appKey, appSecret, sellerID, "demo_rsa_private_key.pem", "touchlife_rsa_public_key.pem");
    var request = new TradeRefundApplyRequest(accessToken);
    request.UserId = "7963331065175620093";
    request.NotifyUrl = "http://server.com/refund/callback";
    request.TransactionId = "fcfc39e1-ba18-4053-8955-ea692daccc70";
    request.RefundNo = "238974128394"
    request.TotalFee = 9980;
    request.CashFee = 9980;
    request.RefundFee = 9980;
    
    var resp = client.Execute<TradeRefundApplyResponse>(request);
    Console.WriteLine("body:" + resp.Body);
    Console.WriteLine("RefundId:" + resp.RefundId);
    Console.WriteLine("RefundStatus:" + resp.RefundStatus);
    
    r = RefundApplyRequest(HOST, PORT)
    r.userId = "7963331065175620093"
    r.notifyUrl = "http://server.com/refund/callback"
    r.transactionId = "fcfc39e1-ba18-4053-8955-ea692daccc70"
    r.tradeNo = "238974128394"
    r.totalFee = "9980"
    r.cashFee =  "9980"
    r.refundFee = "9980"
    res = r.getResponse()
    print 'refundId:' + res.get("refundId")
    print 'refundStatus:' + res.get("refundStatus")
    
    $req = new TradeRefundApplyRequest;
    $req->setUserId("7963331065175620093");
    $req->setNotifyUrl("http://server.com/refund/callback");
    $req->setTransactionId("fcfc39e1-ba18-4053-8955-ea692daccc70");
    $req->setRefundNo("238974128394");
    $req->setTotalFee(9980);
    $req->setCashFee(9980);
    $req->setRefundFee(9980);
    $resp = $client->execute($req);
    echo "<br>" . "transactionId:" . $resp["refundId"];
    echo "<br>" . "tradeStatus:" . $resp["refundStatus"];
    

    异步通知

    TradeRefundResultResponse response = new TradeRefundResultResponse();
    response.setBody("{\"appkey\": \"1000942281834408\", \"charset\": \"UTF-8\", \"refundFee\": 0.01, \"refundStatus\": \"REFUND_SUCCESS\", \"timestamp\": 1435150403, \"signType\": \"RSA\", \"userId\": 13185231647174833491, \"apiVersion\": \"1.1\", \"refundId\": \"e4d3453a-51d5-4e44-ac6f-b3fb3cdcf765\", \"refundNo\": \"92669893\", \"cashFee\": 0.1, \"result\": \"SUCCESS\", \"sellerId\": \"1253748780192040\", \"transactionId\": \"d5a4cc42-f2a6-4828-a9ef-86bb59dfa3c9\", \"totalFee\": 0.01}");
    assert(SecurityUtils.verifySign(response.getParams(), appsecret, pubKey)); //进行验证签名等操作
    System.out.println("transactionId:" + response.getTransactionId());
    System.out.println("refundNo:" + response.getRefundNo());
    System.out.println("refundId:" + response.getRefundId());
    System.out.println("totalFee:" + response.getTotalFee());
    System.out.println("cashFee:" + response.getCashFee());
    System.out.println("refundFee:" + response.getRefundFee());
    System.out.println("refundStatus:" + response.getRefundStatus());
    
    TradeRefundApplyResponse response = new TradeRefundApplyResponse();
    response.Body = "{\"userId\": \"9113011628065526464\", \"sign\": \"\", \"result\": \"SUCCESS\", \"tradeNo\": \"No_1434041804\", \"notifyTime\": \"20150612005659\", \"tradeService\": \"sampleService\", \"tradeCreateTime\": \"20150612005644\", \"charset\": \"UTF-8\", \"attach\": null, \"tradeName\": \"sampleTradeName\", \"sellerId\": \"1253748780192040\", \"tradeStatus\": \"TRADE_SUCCESS\", \"tradeDesc\": \"desc\", \"totalFee\": 0.01, \"appKey\": \"31415926\", \"timestamp\": 1434041819, \"tradeSuccessTime\": \"20150612005800\", \"paymentType\": \"alipay\", \"cashFee\": 0.01, \"settleFee\": 0.01, \"signType\": \"RSA\", \"apiVersion\": \"1.1\", \"notifyId\": \"782f07d3-f8c4-4af2-9eb7-3fd022a39d4e\"}";
    response.ParseFrom();
    if (SecurityUtils.VerifySign(response.Parameters, appSecret, "touchlife_rsa_public_key.pem")) //进行验证签名等操作
    {
        Console.WriteLine("TransactionId:" + response.TransactionId);
        Console.WriteLine("RefundNo:" + response.RefundNo);
        Console.WriteLine("RefundId:" + response.RefundId);
        Console.WriteLine("TotalFee:" + response.TotalFee);
        Console.WriteLine("CashFee:" + response.CashFee);
        Console.WriteLine("RefundFee:" + response.RefundFee);
        Console.WriteLine("RefundStatus:" + response.RefundStatus);
    }
    
    //TODO
    
    $body = "{\"appkey\": \"1000942281834408\", \"charset\": \"UTF-8\", \"refundFee\": 0.01, \"refundStatus\": \"REFUND_SUCCESS\", \"timestamp\": 1435150403, \"signType\": \"RSA\", \"userId\": 13185231647174833491, \"apiVersion\": \"1.1\", \"refundId\": \"e4d3453a-51d5-4e44-ac6f-b3fb3cdcf765\", \"refundNo\": \"92669893\", \"cashFee\": 0.1, \"result\": \"SUCCESS\", \"sellerId\": \"1253748780192040\", \"transactionId\": \"d5a4cc42-f2a6-4828-a9ef-86bb59dfa3c9\", \"totalFee\": 0.01}";
    $resp = $client->onResponse($body);
    echo "<br>" . "transactionId:" . $resp["transactionId"];
    echo "<br>" . "refundNo:" . $resp["refundNo"];
    echo "<br>" . "refundId:" . $resp["refundId"];;
    echo "<br>" . "totalFee:" . $resp["totalFee"];;
    echo "<br>" . "cashFee:" . $resp["cashFee"];;
    echo "<br>" . "refundFee:" . $resp["refundFee"];
    echo "<br>" . "refundStatus:" . $resp["refundStatus"];;
    

    订单回传

    TouchlifeClient client = new DefaultTouchlifeClient(url, appkey, appsecret, sellerId, prvKey, pubKey);
    OrderOrderPushRequest req = new OrderOrderPushRequest();
    req.setUserId("7963331065175620093");
    req.setOrderId("238974128394");
    req.setOrderService("com.company.product");
    req.setOrderTitle("触宝-话费充值");
    req.setOrderShortInfo("触宝-话费充值-100元");
    req.setOrderStatus("充值成功");
    req.setOrderCreateTime(new Date(System.currentTimeMillis()));
    req.setOrderFinishTime(new Date(System.currentTimeMillis()));
    req.setOrderUrl("http://chubao.cn/orderdetail?id=238974128394");
    req.setAttach("{\"received_code\": \"439289\"}");
    OrderOrderPushResponse response;
    response = client.execute(req);
    
    DefaultTouchlifeClient client = new DefaultTouchlifeClient(serverUrl, appKey, appSecret, sellerID, prvKey, pubKey);
    var request = new OrderOrderPushRequest(accessToken);
    request.UserId = "7963331065175620093";
    request.OrderId = "238974128394"
    request.OrderService = "com.company.product";
    request.OrderTitle = "触宝-话费充值";
    request.OrderShortInfo = "触宝-话费充值-100元";
    request.OrderStatus = "充值成功";
    request.OrderCreateTime = DateTime.Now;
    request.OrderFinishTime = DateTime.Now;
    request.OrderUrl = "http://chubao.cn/orderdetail?id=238974128394";
    request.Attach = "{\"received_code\": \"439289\"}"
    var resp = client.Execute<OrderOrderPushResponse>(request);
    Console.WriteLine("body:" + resp.Body);
    
    order_push = OrderPushRequest(HOST, PORT)
    order_push.userId = "7963331065175620093"
    order_push.orderId = "238974128394"
    order_push.orderService = "com.company.product"
    order_push.orderTitle = "触宝-话费充值"
    order_push.orderShortInfo = "触宝-话费充值-100元"
    order_push.orderStatus = "充值成功"
    order_push.orderCreateTime = ""
    order_push.orderFinishTime = ""
    order_push.orderUrl = "http://chubao.cn/orderdetail?id=238974128394";
    order_push.attach = "{\"received_code\": \"439289\"}";
    res = order_push.getResponse()
    
    $req = new OrderOrderPushRequest;
    $req->setUserId("7963331065175620093");
    $req->setOrderId("238974128394");
    $req->setOrderService("com.company.product");
    $req->setOrderTitle("触宝-话费充值");
    $req->setOrderShortInfo("触宝-话费充值-100元");
    $req->setOrderStatus("充值成功");
    $req->setOrderCreateTime("");
    $req->setOrderFinishTime("");
    $req->setOrderUrl("http://chubao.cn/orderdetail?id=238974128394");
    $req->setAttach("{\"received_code\": \"439289\"}");
    $resp = $client->execute($req);