抖音小程序支付宝的接口怎么写

2021-03-13
275

抖音对接支付宝的流程

先要通过服务端获取抖音提供的SP订单号;

再把SP单号等一些数据发送给支付宝。

再把支付宝返回的信息传回抖音端这样支付就对接好了。


include 'alipay.class.php';
include 'AopSdk.php';


$risk_info=json_encode(array('ip'=>$_SERVER['REMOTE_ADDR']));
$array=array(
    'app_id'=>'800117472149',
    'method'=>'tp.trade.create',
    'charset'=>'utf-8',
    'sign_type'=>'MD5',
    'timestamp'=>time(),
    'version'=>'1.0',    
    'out_order_no'=>'20190727000',
    'uid'=>'4ybyfXwNMulvUhBT',
    'merchant_id'=>'1900011759',
    'total_amount'=>100,
    'currency'=>'CNY',
    'subject'=>'商户订单名称',
    'body'=>'商户订单详情',
    'trade_time'=>time(),
    'valid_time'=>'20',
    'notify_url'=>'https://www.juxunapp.com/',
    'risk_info'=>$risk_info    
);



$aplipay = new alipay($array);

$res=$aplipay->pay();
app_id = isset($args['app_id']) ? $args['app_id'] : null;
        $this->method = isset($args['method']) ? $args['method'] : null;
        $this->charset = isset($args['charset']) ? $args['charset'] : null;
        $this->sign_type = isset($args['sign_type']) ? $args['sign_type'] : null;
        $this->timestamp = isset($args['timestamp']) ? $args['timestamp'] : null;
        $this->version = isset($args['version']) ? $args['version'] : null;        
        $this->out_order_no = isset($args['out_order_no']) ? $args['out_order_no'] : null;    
        $this->uid = isset($args['uid']) ? $args['uid'] : null;    
        $this->merchant_id = isset($args['merchant_id']) ? $args['merchant_id'] : null;    
        $this->total_amount = isset($args['total_amount']) ? $args['total_amount'] : null;    
        $this->currency = isset($args['currency']) ? $args['currency'] : null;    
        $this->subject = isset($args['subject']) ? $args['subject'] : null;    
        $this->body = isset($args['body']) ? $args['body'] : null;    
        $this->trade_time = isset($args['trade_time']) ? $args['trade_time'] : null;    
        $this->valid_time = isset($args['valid_time']) ? $args['valid_time'] : null;    
        $this->notify_url = isset($args['notify_url']) ? $args['notify_url'] : null;    
        $this->risk_info = isset($args['risk_info']) ? $args['risk_info'] : null;
        
        
        $biz_content = json_encode(array( 
            'out_order_no'=>$this->out_order_no,
            'uid'=>$this->uid,
            'merchant_id'=>$this->merchant_id,
            'total_amount'=>$this->total_amount,
            'currency'=>$this->currency,
            'subject'=>$this->subject,
            'body'=>$this->body,
            'trade_time'=>$this->trade_time ,
            'valid_time'=>$this->valid_time,
            'notify_url'=>$this->notify_url,
            'risk_info'=>$this->risk_info                
        ));

        $this->biz_content=$biz_content;
        
        $sign['app_id']=$this->app_id;
        $sign['method']=$this->method;
        $sign['charset']=$this->charset;
        $sign['sign_type']=$this->sign_type;
        $sign['timestamp']=$this->timestamp;
        $sign['version']=$this->version;
        $sign['biz_content']=$this->biz_content;
        
        $this->sign = md5($this->getSignContent($sign,'utf-8','gx9j1saqpjkjgp024kzm6ypncfufruaxk76xk12b'));
        
    }
    
    
    public function pay(){
        $url="https://tp-pay.snssdk.com/gateway";
        $data=array('app_id'=>$this->app_id,'method'=>$this->method,'charset'=>$this->charset,'sign_type'=>$this->sign_type,'sign'=>$this->sign,'timestamp'=>$this->timestamp,'version'=>$this->version,'biz_content'=>$this->biz_content);
        


        $res=json_decode($this->send_post($url,$data),true);


        //在这里是要将数据返回给前端,通过前端拉起支付宝收银台

        $ali_data=array(
            'body'=>$this->body,
            'subject'=>$this->subject,
            'body'=>$this->body,
            'fee'=>$this->total_amount
        );
        $ali_data2=array(
            'trade_no'=>$res['response']['trade_no']
        );        
        
    
        $config=array(
            'ali_app_app_id'=>'2019121069845600',
            'ali_app_rsa_pri_key'=>'MIFEowIBAAKCAQEAxAfJcO3atT9LofwrDJuZP09nzUgNW5VKdZmSxHnXLqjzo+w2AIbBVmURTLtyDFAJAB19QZ2BXNtll2pb8rXonqQHZFi+5+cyB2/pLKRRNdaqGlQTbLShpbFhPrVNUFgg/zb2O5XiL1PXH3abNY45fVTiyseDJbIlGq1SeH12A5f5UZTA+/bsUTe2HLgupGltTNA3/OwBsw2u3zgr/aYjsj9mf029+HbzZtVMpJlQ2If80tcE9k8U75u+21H/ujDjKYThVbAKQPDSoUmLWlFPasExqRsKffIZdxbANNsKnXpJAP00NA0Nk06d3xmjfYdZiQtkpMo0myKF5JWUGRz7wwIDAQABAoIBAAFuySMhKesPNl9Nt4bVEE6tJuYSM77KnYu0fqUe+tqlc3psPIzOb1VRUcoMyK2cXCR7ErJLE2n5VInBxkBE4hleu4sZNvP89ZmmUL75yHorQn0ExkuSGmhanopVyuXebwdOgIg49TlBVJ4vQL0od/UZjLrMsIGzBqBmSecFi7pE+9AiGPIW3+AnZ1vzoTr5WwaXENzNj0uRWeXMg3vvxdBJm40pgsbgOrQzTtWgaRgWAjccMTPm4IfHj/FlWaa26BgR6EpjaQjSioOMOYUBEoKkgnFEHO1XCJSPjFNYo8sUgt8/wGMSXa5E2Yey2BY3fDvoSwAxsdki684nmog4A2kCgYEA4tyoVTI+2izwRKwRVqIwqtwswB6Q7OzC7dRcRUZwfoBRwN51S/CxTvBU9WujfjkgsCB5HFhgsfGAMfLzKNhpNdc/jbQtjlEoQAG/WmEM1AwllKs+0pt3ID+vo70YS3mIYIGKM2Lee4Fz0iaBLJGCW69EKGjX1wr1WI4kTG9N8acCgYEA3TVfSPL3sFKga+fW2ME9kdWZmzZQVvpShaN9r/YjErlz4RMvDvN1szKeyRg6YZbMJicxYeLVCWOaXNRwc3C2rVV6C1KSSqSnQd/QKvjzgWadK88RBnk3JDBi5XnqwW2JLqN1VeN8MplSFbdTorbNs+Md3WBzrdIJZnuinc3cEIUCgYAhDuKAt7es90tz1lcYdr38x+TFgi7AN6gYHA/uEFuoM262WjRhgotz41WeBbdnV0/KGpFLbh15EKYLoUmJtC9wpxMdxRm2WWEyIo8NzoKeC78WMPYQnpL3YhBoHdACf4098uJ+pnOhL7X+85lzMyj5z0pxUQXS0kf6RYxIjxeelQKBgBZmDRvp3kKwWyYR96NDDeTyZ/dbbI8iEbEOeO+UUMDYnm8v7hfpdwWKHqHmHiM7jbhfR5TNzxyARWUY7boCs7yhZxY2ajG8smLtMrrnMmDr7wY8lVC+fWLgs2LhEXA8kyNx0bO8sRq+g51HTuSu9e09Fg0QcyYqmmESK8kmyx2xAoGBANA3y+mVo6zKvwYNP/hsivcvQL4+P9lMlyT9J953lJdGUdj7rQI87mg8NamNrAhcfdg5HuXSDlfLhlnW9rT16pc2yCi3n5qZDCpydAmBB2MS91vteRvg05p17tzRIghxQuFSyl+djeEK1KtHcvMcblFL56G7YEAoBhRlkWeiVr0B',
            'ali_app_pay_rsa_pub_key'=>'MIIAIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxAfJcO3atT9LofwrDJuZP09nzUgNW5VKdZmSxHnXLqjzo+w2AIbBVmURTLtyDFAJAB19QZ2BXNtll2pb8rXonqQHZFi+5+cyB2/pLKRRNdaqGlQTbLShpbFhPrVNUFgg/zb2O5XiL1PXH3abNY45fVTiyseDJbIlGq1SeH12A5f5UZTA+/bsUTe2HLgupGltTNA3/OwBsw2u3zgr/aYjsj9mf029+HbzZtVMpJlQ2If80tcE9k8U75u+21H/ujDjKYThVbAKQPDSoUmLWlFPasExqRsKffIZdxbANNsKnXpJAP00NA0Nk06d3xmjfYdZiQtkpMo0myKF5JWUGRz7wwIDAQAB',
        );
        
        
        $website="https://www.juxunapp.com/";
        $data2                 = [];
        $data2['trade_no']     = $res['response']['trade_no'];    //刚刚获取到的trade_no订单号
        $data2['app_id']       = $this->app_id;                //头条支付分配给业务方的ID
        $data2['sign_type']    = $this->sign_type;                //头条采用的MD5
        $data2['timestamp']    = (string)$this->timestamp;                //发送请求的时间
        $data2['merchant_id']  = $this->merchant_id;        //头条支付分配给业务方的商户号
        $data2['uid']          = $this->uid;                //唯一标识用户open_id(这个是头条的)
        $data2['total_amount'] = $this->total_amount;        //金额,分为单位,应传整型
        $data2['params']       = json_encode(['url' => $this->aliapppaytest($ali_data , $biz_content , $ali_data2 , $website , $config)]);        //这里是支付宝APP支付的请求参数,我在这里使用了支付宝的SDK

        $stringToBeSigned      = $this->getSignContent($data2, $this->charset, 'gx9j1saqpjkjgp024kzm6ypncfufruaxk76xk12b');    //将以上参数再次进行签名处理
        $data2["sign"]         = md5($stringToBeSigned);

        $data2['pay_channel']  = "ALIPAY_NO_SIGN";
        $data2["pay_type"]     = "ALIPAY_APP";
        $data2['method']       = 'tp.trade.confirm';
        $data2['risk_info']    = $this->risk_info;
        return ['error'=>0 , 'msg'=>'success' , 'data'=>$data2];            // 将这些参数,返回给前端处理就可以了
                
                
        //return $res;
        //return json_encode($this->alipayData($res));
    }



    public function aliapppaytest($data , $biz_content , $data2 , $website , $config){
            require 'AopSdk.php';
            $aop                     = new \AopClient();
            $aop->gatewayUrl         = "https://openapi.alipay.com/gateway.do";
            $aop->appId              = $config['ali_app_app_id'];                //支付宝APPID
            $aop->rsaPrivateKey      = $config['ali_app_rsa_pri_key'];        //支付宝秘钥
            $aop->format             = "json";
            $aop->charset            = "UTF-8";
            $aop->signType           = "RSA2";
            $aop->alipayrsaPublicKey = $config['ali_app_pay_rsa_pub_key'];   //支付宝公钥

            //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
            $request = new AlipayTradeAppPayRequest();  //SDK已经封装掉了公共参数,这里只需要传入业务参数
            $data2 = [
                'body'            => $data['body'],
                'subject'         => $data['subject'],
                'out_trade_no'    => $data2['trade_no'],
                'timeout_express' => '30m',
                'total_amount'    => $data['fee']/1000,
                'product_code'    => 'QUICK_MSECURITY_PAY',
            ];
            $postdata = json_encode($data2);
            $request->setNotifyUrl($website . '/payment/toutiao/notify.php');    //服务器异步通知http地址);
            $request->setBizContent($postdata);
            //$response = $aop->sdkExecute($request);     //这里和普通的接口调用不同,使用的是sdkExecute
            
            $response = $aop->sdkExecute ( $request); 

            //htmlspecialchars是为了输出到页面时防止被浏览器将关键参数html转义,实际打印到日志以及http传输不会有这个问题
    //        return htmlspecialchars($str);//就是orderString 可以直接给客户端请求,无需再做处理。
            return $response;//就是orderString 可以直接给客户端请求,无需再做处理。
    }



    public function alipayData($res){
        
        $biz_content=json_encode(array(
            'subject'=>$this->subject,
            'out_trade_no'=>$this->out_order_no,
            'total_amount'=>$this->total_amount,
            'product_code'=>"QUICK_MSECURITY_PAY"        
        
        ));
        
        $url=array(
            'app_id'=>$this->app_id,
            'biz_content'=>$biz_content,
            'charset'=>$this->charset,
            'method'=>'alipay.trade.app.pay',
            'notify_url'=>$this->notify_url,
            'sign'=>$res['sign'],
            'sign_type'=>'RSA2',
            'timestamp'=>time(),
            'version'=>$this->version
        );
        
        $url = $this->getSignContent($url,'utf-8','');
        
        $data=array(
            'app_id'=>$this->app_id,
            'sign_type'=>'MD5',
            'timestamp'=>(string)$this->timestamp,
            'trade_no'=>$res['response']['trade_no'],
            'merchant_id'=>'1900011747',
            'uid'=>'4ybyfXwNMulvUhBT',
            'total_amount'=>100,
            'params'=>json_encode(array('url'=>$url)),
            'sign'=>$this->sign,
            'method'=>'tp.trade.confirm',
            'pay_channel'=>'ALIPAY_NO_SIGN',
            'pay_type'=>'ALIPAY_APP',
            'risk_info'=> $this->risk_info        
        );
        
        return $data;
    }
    
    
    public function getSignContent($params , $charset,$app_secret) {
        ksort($params);
        $stringToBeSigned = "";
        $i = 0;
        foreach ($params as $k => $v) {
            if (false === $this->checkEmpty($v) && "@" != substr($v, 0, 1)) {
                // 转换成目标字符集
                $v = $this->characet($v, $charset);
                if ($i == 0) {
                    $stringToBeSigned .= "$k" . "=" . "$v";
                } else {
                    $stringToBeSigned .= "&" . "$k" . "=" . "$v";
                }
                $i++;
            }
        }
        $stringToBeSigned = $stringToBeSigned.$app_secret;

        unset ($k, $v);
        return $stringToBeSigned;
    }
    public function checkEmpty($value) {
        if (!isset($value))
            return true;
        if ($value === null)
            return true;
        if (trim($value) === "")
            return true;
        return false;
    }

    public function characet($data, $targetCharset) {
        if (!empty($data)) {
            $fileType = "UTF-8";
            if (strcasecmp($fileType, $targetCharset) != 0) {
                $data = mb_convert_encoding($data, $targetCharset, $fileType);
            }
        }
        return $data;
    }

   
    
    public function send_post($url, $post_data) {
      $postdata = http_build_query($post_data);
      $options = array(
        'http' => array(
          'method' => 'POST',
          'header' => 'Content-type:application/x-www-form-urlencoded',
          'content' => $postdata,
          'timeout' => 15 * 60 // 超时时间(单位:s)
        )
      );
      $context = stream_context_create($options);
      $result = file_get_contents($url, false, $context);
      return $result;

    }
    

}

?>

Page({
data: {},
onLoad: function () {

},
pay: function () {
tt.request({
url: 'https://www.juxunapp.com/alipay2/aop/test/index.php', // 目标服务器url
success: function (res) {
console.log(res.data.data)
tt.requestPayment({
data:res.data.data,
success(res) {
console.log(res);
},
fail(res) {
console.log(res);
}
})
}
});

}
});



联系我们

服务热线

150-168-15717

服务热线

136-861-00085

服务热线

135-3096-0821

联系地址

东莞市南城科技大厦1312

在线咨询

东莞小程序开发_东莞小程序开发公司_小程序开发_小程序开发公司

微信扫一扫,优惠早知道