支付验证签名支付失败?—— 微信支付的app支付

ringa_lee
发布: 2018-05-14 15:45:10
原创
5782人浏览过

情况描述:

1,调用同一下单接口,已经获取prepay_id等值了呀!

2,给app提交数据之前,有个二次签名嘛,我按规则签了呀!//请大神看看我写的代码是否正确

3,为啥会出现这种问题?

4,跪求大神指导!

这是我二次签名的代码:

............ //设置参数等等

$wx_result = $wechatAppPay->unifiedOrder( $params );//调用同一下单接口,并成功返回结果
 
//开始生成二次签名
$sign_array              = array();//第二次签名需要的参数
$sign_array['appid']     = $wx_result['appid'];
$sign_array['mch_id']    = $wx_result['mch_id'];
$sign_array['prepay_id'] = $wx_result['prepay_id'];
$sign_array['nonce_str'] = $wx_result['nonce_str'];
$sign_array['timeStamp'] = time();
$sign_array['package']   = $wx_result['Sign=WXPay'];
$sign_two = $wechatAppPay->MakeSign($sign_array);//调用签名生成函数
登录后复制

下面是我生成签名的函数代码:

/**
 * 生成签名
 *  @return 签名
 */
public function MakeSign( $params ){
    //签名步骤一:按字典序排序数组参数
    ksort($params);
    $string = $this->ToUrlParams($params);//调用拼接函数
    //签名步骤二:在string后加入KEY
    $string = $string . "&key=".$this->key;
    //签名步骤三:MD5加密
    $string = md5($string);
    //签名步骤四:所有字符转为大写
    $result = strtoupper($string);
    return $result;
}
      /**
     * 将参数拼接为url: key=value&key=value
     * @param   $params
     * @return  string
     */
    public function ToUrlParams( $params ){
        $string = '';
        if( !empty($params) ){
            $array = array();
            foreach( $params as $key => $value ){
                $array[] = $key.'='.$value;
            }
            $string = implode("&",$array);
        }
        return $string;
    }
登录后复制

这个问题已解决,原因是第二次签名时的参数名不对。

/////////////////////////////更新 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
但是回调不知带哦怎么写了!!

但收不到值(收不到微信给发的 支付结果通用通知 ),也不知道是怎么回事

接收微信支付异步通知回调地址:

$notify_url        = 'http://www.XXXXXX.com/index.php/apps/cart/wxResult';
登录后复制
//微信支付回调函数
public function wxResult()
{
    $data = array();
    $data = $this->wechatAppPay->getNotifyData();//调用获取数据函数
    
    ////////********逻辑处理********//////////
    
 $data2 = $this->wechatAppPay->replyNotify();//接收通知成功后应答输出XML数据
 
 
 $this->jsonmsg($data);
 }
登录后复制

获取通知数据的函数:

/**
 * 
 * 获取支付结果通知数据
 * return array
 */
public function getNotifyData(){
    //获取通知的数据
    $xml = $GLOBALS['HTTP_RAW_POST_DATA'];
    $data = array();
    if( empty($xml) ){
        return false;
    }
    $data = $this->xml_to_data( $xml );
    if( !empty($data['return_code']) ){
        if( $data['return_code'] == 'FAIL' ){
            return false;
        }
    }
    return $data;
}
登录后复制

接收通知成功后应答输出XML数据函数:

   /**
     * 接收通知成功后应答输出XML数据
     * @param string $xml
     */
    public function replyNotify(){
        $data['return_code'] = 'SUCCESS';
        $data['return_msg'] = 'OK';
        $xml = $this->data_to_xml( $data );
        echo $xml;
        die();
    }
登录后复制

**已解决
///////更新/////////////////商户系统对于支付结果通知的内容做签名验证///////////////////////////////**

正在做商户系统对于支付结果通知的内容做签名验证,咋验证?
是啥?逻辑思路是啥?

回复内容:

支付接口文档

文档中规定的字段

appid

partnerid

prepayid

package

noncestr

timestamp

sign
请不要更改参数名大小写,也不要加下划线什么的。我之前就是遇到这个问题,已经解决了。

你好 我也遇到了相同的问题 不知道你的解决了没

参数名参与md5计算吗?

二次签名的时间戳是 生成pre_payid时的时间戳

微信app下载
微信app下载

微信是一款手机通信软件,支持通过手机网络发送语音短信、视频、图片和文字。微信可以单聊及群聊,还能根据地理位置找到附近的人,带给大家全新的移动沟通体验,有需要的小伙伴快来保存下载体验吧!

下载
相关标签:
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号