• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

php 搞代码 4年前 (2022-01-22) 18次浏览 已收录 0个评论

情况描述:

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

2,给app提交数据之前,有个二次签名嘛,我按本文来源gao@daima#com搞(%代@#码@网&搞gaodaima代码规则签了呀!//请大神看看我写的代码是否正确

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时的时间戳


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:支付验证签名支付失败?—— 微信支付的app支付

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址