微信清关代码

注:此处只有微信支付清关相关代码,支付自行对接,也适用境外支付清关(需是服务商)。目前微信境外支付需对接第三方机构,第三方机构与微信对接,子商户无法直接对接微信。注:(香港、英国、日本、新加波)四国可以直接对接,需在相关国家注册公司,申请微信支付。

<?php 
include_once("./Custom.class.php");
$declareApi = new Declare_pub(); 

$parameters['out_trade_no'] = isset($_REQUEST['out_trade_no']) ? $_REQUEST['out_trade_no'] : '';//商户订单号
$parameters['customs'] = 'GUANGZHOU_ZS';//海关
$parameters['mch_id'] = 'xxxxxxxx';//支付id
$parameters['transaction_id'] = isset($_REQUEST['transaction_id']) ? $_REQUEST['transaction_id'] : '';//财付通交易号
$pageData['dsss'] =  $declareApi->getParameters($parameters);
$url = 'https://api.mch.weixin.qq.com/cgi-bin/mch/customs/customdeclareorder';
$xmlData = "
    <xml>
       <appid>xxxxxxxxxxxxxx</appid>
       <customs>GUANGZHOU_ZS</customs>
       <mch_customs_no>xxxxxxxxxxx</mch_customs_no>
       <mch_id>xxxxxxxx</mch_id>
       <out_trade_no>2018071753495552</out_trade_no>
       <sign>".$pageData['dsss']['sign']."</sign>
       <transaction_id>42000001572018071717655xxxxx</transaction_id>
    </xml>";
$header[] = "Content-type: text/xml";      //定义content-type为xml,注意是数组
$ch = curl_init ($url);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_HTTPHEADER,$header);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch,CURLOPT_POSTFIELDS, $xmlData);
var_dump($xmlData);
$response = curl_exec($ch);
if(curl_errno($ch)){
    var_dump($ch);
}
curl_close($ch);
var_dump($response);
?>

Custom.class.php:

<?php
/**
 *接口基类
 */
class Common_util
{
    public $result;//返回参数
    var $parameters;//请求参数
    var $key = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
    var $sign_type  = "MD5";
    var $mch_customs_no  = "xxxx";
    /**
     *     作用:生成签名
     */
    public function createSign($parameters,$key){
        //签名步骤一:按字典序排序参数
        ksort($parameters);
        //签名步骤二:拼接参数
        $buff = "";
        foreach ($parameters as $k => $v){
            $buff .= $k . "=" . $v . "&";
        }
        //签名步骤三:在string后加入KEY
        $str = $buff.'key='.$key;
        // echo htmlspecialchars($str).'<br>';
        $mysign = "";
        if($this->sign_type == 'MD5') {
            $mysign = md5($str);
            $mysign = strtoupper($mysign);//转成大写
        }else {
            die("暂不支持".$this->sign_type."类型的签名方式");
        }
        return $mysign;
    }


    public function para_filter($parameter) { //除去数组中的空值和签名模式
        $para = array();
        while (list ($key, $val) = each ($parameter)) {
            $filter_arr = array('sign');
            if( in_array($key,$filter_arr) || $val=="" ){
                continue;
            }else{
                $para[$key] = $parameter[$key];
            }
        }
        return $para;
    }
}    
    
/**
 * 海关申报接口
 */
class Declare_pub extends Common_util
{    
    function __construct() 
    {
        //设置接口链接
        $this->url = 'https://api.mch.weixin.qq.com/cgi-bin/mch/customs/customdeclareorder';
    }
    
    /**
     * 生成参数
     */
    function getParameters($parameters) //merchantId,orderId
    {    
        $this->parameters = $parameters;
        if($this->parameters["customs"] == null)//海关 
        {
            exit("缺少必填参数customs!"."<br>");
        }

        if($this->parameters["out_trade_no"] == null && $this->parameters["transaction_id"] == null)//海关 
        {
            exit("缺少必填参数out_trade_no或者transaction_id!"."<br>");
        }

        //增加其他必须参数
           //$this->parameters["sign_type"] = $this->sign_type;//加密类型
           //$this->parameters["service_version"] = $this->service_version;
           //$this->parameters["input_charset"] = $this->input_charset;
           //$this->parameters["sign_key_index"] = $this->sign_key_index;
           //$this->parameters["partner"] = $this->partner;
        $this->parameters["appid"] = 'xxxxxxxxxx';
        $this->parameters["mch_customs_no"] = $this->mch_customs_no;//商户海关备案号
           //增加其他必须参数 签名
        $this->parameters["sign"] = $this->createSign( $this->para_filter($this->parameters),$this->key);//签名
        return $this->parameters;
    }
    
}
?>

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值