微信支付商户公告

微信支付接口安全调用小提示




尊敬的微信支付商户:


近期我们通过安全技术手段发现,有部分商户在调用微信支付接口时,未能严格按照接口文档进行开发,存在安全隐患。请根据附录中的检查项对自身系统和代码进行检查。部分代码可参考官方最新版的SDK(下载地址


【附录】接口开发安全检查项

1、保管好自己的API证书和API密钥,并且定期更新(建议至少3个月更新一次)。有关使用证书和密钥的内容详见详细说明

2、支付完成后,需要再次调用查询订单接口核对订单状态,否则可能导致订单状态错误,给商户造成资金损失

以下示例选自PHP版SDK代码


    /**
     * 
     * 查询订单,WxPayOrderQuery中out_trade_no、transaction_id至少填一个
     * appid、mchid、spbill_create_ip、nonce_str不需要填入
     * @param WxPayOrderQuery $inputObj
     * @param int $timeOut
     * @throws WxPayException
     * @return 成功时返回,其他抛异常
     */
    public static function orderQuery($inputObj, $timeOut = 6)
    {
        $url = "https://api.mch.weixin.qq.com/pay/orderquery";
        //检测必填参数
        if(!$inputObj->IsOut_trade_noSet() && !$inputObj->IsTransaction_idSet()) {
            throw new WxPayException("订单查询接口中,out_trade_no、transaction_id至少填一个!");
        }
        $inputObj->SetAppid(WxPayConfig::APPID);//公众账号ID
        $inputObj->SetMch_id(WxPayConfig::MCHID);//商户号
        $inputObj->SetNonce_str(self::getNonceStr());//随机字符串
        
        $inputObj->SetSign();//签名
        $xml = $inputObj->ToXml();
        
        $startTimeStamp = self::getMillisecond();//请求开始时间
        $response = self::postXmlCurl($xml, $url, false, $timeOut);
        $result = WxPayResults::Init($response);
        self::reportCostTime($url, $startTimeStamp, $result);//上报请求花费时间
        
        return $result;
    }


3、对各种微信支付返回结果(支付结果通知、查询订单等)进行签名校验,否则可能导致伪造支付结果等风险,给商户造成资金损失

以下示例选自PHP版SDK代码


    /**
     * 
     * 接口调用结果类
     * @author widyhu
     *
     */
    class WxPayResults extends WxPayDataBase
    {
        /**
         * 
         * 检测签名
         */
        public function CheckSign()
        {
            //fix异常
            if(!$this->IsSignSet()){
                throw new WxPayException("签名错误!");
            }
            
            $sign = $this->MakeSign();
            if($this->GetSign() == $sign){
                return true;
            }
            throw new WxPayException("签名错误!");
        }
}




微信团队

2015年07月02日