您现在的位置是:Weixin - 技术吧
  • js判断是否微信环境

    /**
     * 判断当前是否是微信环境
     * @returns
     */
    function isWeiXin() {
    	var ua = navigator.userAgent.toLowerCase();
        if(ua.match(/MicroMessenger/i)=="micromessenger") {
            return true;
        } else {
            return false;
        }
    }

    yuli0927 2019年09月03日 标签: JavaScript Weixin分类:

  • 去掉微信昵称的emoji表情(PHP5.6)

    // 处理不可见字符 去掉EMOJI表情
    function clearEmoji($char) {
    // PHP 5.6已废弃preg_replace
    //    $char = preg_replace("#\\\u[2def]([0-9a-f]{3})#ie", "", json_encode($char));
    //    return json_decode($char, true);
        $str = preg_replace_callback('/./u', function (array $match) {
            return strlen($match[0]) >= 4 ? '' : $match[0];
        }, $str);
        return $str;
    }

    yuli0927 2019年07月24日 标签: PHP Weixin分类: PHP

  • 生成微信支付签名

    // 格式化参数格式化成url参数
    // 不同于http_build_query,本函数不会对参数urlencode
    private function toUrlParams($param) {
        $buff = "";
        foreach( $param as $k => $v ) {
            if( $k != "sign" && $v !== "" && $v !== NULL && !is_array($v) ) {
                $buff .= $k."=".$v."&";
            }
        }
        $buff = trim($buff, "&");
        return $buff;
    }
    
    // 生成签名
    public function makeSign($param, $key) {
        if( !$key || empty($key) ) {
            return false;
        }
        // ①按字典序排序参数
        ksort($param);
        $string = $this->toUrlParams($param);
        // ②在string后加入KEY
        $string = $string."&key=".$key;
        // ③MD5加密,④所有字符转为大写
        return strtoupper(md5($string));
    }

    yuli0927 2019年07月24日 标签: PHP Weixin wxpay分类: PHP

  • 微信支付退款结果通知解密

    微信支付退款结果通知解密步骤如下: 

    第一步,对商户密钥key进行MD5加密,得到32位小写加密串StringA

    key设置路径:微信商户平台(pay.weixin.qq.com)-->账户设置-->API安全-->密钥设置 

    第二步,使用StringA作为key,对参数加密串进行AES-256(ECB模式,PKCS7Padding)解密,得到加密前参数。


    第一步很好理解, 第二步微信并没有给出demo, 经测试可用的PHP代码如下

    注意:示例函数的$key不是商户秘钥,需要事先进行MD5加密

    明文=refund_decrypt(密文,MD5(商户秘钥));

    $refund_xml_string = refund_decrypt($weixin_post_string, md5($weixin_key));
    
    function refund_decrypt($str, $key) {
            $str = base64_decode($str);
            $str = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $str, MCRYPT_MODE_ECB);
            $block = mcrypt_get_block_size('rijndael_128', 'ecb');
            $pad = ord($str[($len = strlen($str)) - 1]);
            $len = strlen($str);
            $pad = ord($str[$len - 1]);
            return substr($str, 0, strlen($str) - $pad);
    }

    解密结果示例

    解密后:

    <root>
    <out_refund_no><![CDATA[R4001312001201707262674894706_4]]></out_refund_no>
    <out_trade_no><![CDATA[201707260201501501005710775]]></out_trade_no>
    <refund_account><![CDATA[REFUND_SOURCE_UNSETTLED_FUNDS]]></refund_account>
    <refund_fee><![CDATA[15]]></refund_fee>
    <refund_id><![CDATA[50000203702017072601461713166]]></refund_id>
    <refund_recv_accout><![CDATA[用户零钱]]></refund_recv_accout>
    <refund_request_source><![CDATA[API]]></refund_request_source>
    <refund_status><![CDATA[SUCCESS]]></refund_status>
    <settlement_refund_fee><![CDATA[15]]></settlement_refund_fee>
    <settlement_total_fee><![CDATA[100]]></settlement_total_fee>
    <success_time><![CDATA[2017-07-26 02:45:49]]></success_time>
    <total_fee><![CDATA[100]]></total_fee>
    <transaction_id><![CDATA[4001312001201707262674894706]]></transaction_id>
    </root>

    退款结果图:

    微信支付退款测试.jpg

    yuli0927 2017年07月26日 标签: PHP Weixin wxpay分类: Weixin

  • {"errcode":45047,"errmsg":"out of response count limit hint]"}

    微信公众号发送客服消息返回错误码45047, 官方并没有给出45047的具体含义.

    根据字面意思和测试结果, 该错误值代表: 对同一用户频发发送客服消息超过限制, 避免对用户造成骚扰. 

    一般只会发调试的时候出现, 解决办法: 接收人给公众号发条消息, 或者换个openid测试. 

    yuli0927 2017年06月14日 标签: Weixin分类: Weixin

1 2 ... Next »