开发者社区> 问答> 正文

安卓、ios APP调用微信支付时,页面出现空白 。(php微信支付,app发起?400报错

安卓、ios APP调用微信支付时,页面出现空白 。(php微信支付,app发起微信支付白屏)?? 400 报错

安卓、ios APP调用微信支付时,页面出现空白

我的后端是用php开发的。我是先调用微信的统一下单生成,生成prepay_id预支付订单号,代码如下:
<?php
public function send_pay(){
//使用统一支付接口
$unifiedOrder = new UnifiedOrder_pub();
$amount = trim($this->config['money'])*100;

$notify_url=$this->config['NotifyUrl'];   //通知URL

//设置统一支付接口参数
//设置必填参数
//appid已填,商户无需重复填写
//mch_id已填,商户无需重复填写
//noncestr已填,商户无需重复填写
//spbill_create_ip已填,商户无需重复填写
//sign已填,商户无需重复填写
//iconv("gb2312","utf-8//IGNORE",
$unifiedOrder->setParameter("body",$this->config['title']);//商品描述
//自定义订单号,此处仅作举例
$out_trade_no = $this->config['code'];
$create_ip = $_SERVER["REMOTE_ADDR"];
$unifiedOrder->setParameter("out_trade_no",$out_trade_no);//商户订单号 
$unifiedOrder->setParameter("total_fee",$amount);//总金额
$unifiedOrder->setParameter("notify_url",$notify_url);//通知地址 
$unifiedOrder->setParameter("spbill_create_ip",$create_ip);//用户端实际ip
$unifiedOrder->setParameter("trade_type","APP");//APP交易类型
$unifiedOrder->setParameter("attach","111");//附加数据 

//获取统一支付接口结果
$unifiedOrderResult = $unifiedOrder->getResult();

//商户根据实际情况设置相应的处理流程
if ($unifiedOrderResult["return_code"] == "FAIL") 
{
    //商户自行增加处理流程
    echo "通信出错:".$unifiedOrderResult['return_msg']."<br>";
}
elseif($unifiedOrderResult["result_code"] == "FAIL")
{
    //商户自行增加处理流程
    echo iconv("utf-8","gb2312//IGNORE","错误代码:".$unifiedOrderResult['err_code']."<br>");
    echo iconv("utf-8","gb2312//IGNORE","错误代码描述:".$unifiedOrderResult['err_code_des']."<br>");
}
elseif($unifiedOrderResult["return_code"] == "SUCCESS")
{
    /**
    成功后返回如下信息
    <xml>
       <return_code><![CDATA[SUCCESS]]></return_code>
       <return_msg><![CDATA[OK]]></return_msg>
       <appid><![CDATA[wx2421b1c4370ec43b]]></appid>
       <mch_id><![CDATA[10000100]]></mch_id>
       <nonce_str><![CDATA[IITRi8Iabbblz1Jc]]></nonce_str>
       <sign><![CDATA[7921E432F65EB8ED0CE9755F0E86D72F]]></sign>
       <result_code><![CDATA[SUCCESS]]></result_code>
       <prepay_id><![CDATA[wx201411101639507cbf6ffd8b0779950874]]></prepay_id>
       <trade_type><![CDATA[APP]]></trade_type>
    </xml>
    **/
    $result = array();
    $result['appid'] = $unifiedOrderResult['appid'];
    $result['partnerid'] = $unifiedOrderResult['mch_id'];
    $result['prepayid'] = $unifiedOrderResult['prepay_id'];
    $result['noncestr'] = $unifiedOrderResult['nonce_str'];
    $result['timestamp'] = time();
    $result['package'] = "Sign=WXPay"; //'Sign=WXPay'
    $result['sign'] = $unifiedOrderResult['sign'];
    echo json_encode($result);

    exit;
        //商户自行增加处理流程
        //......
    }








}

?>

将生成的下面这几个参数发给安卓、ios那边:
$result['appid'] = $unifiedOrderResult['appid'];
$result['partnerid'] = $unifiedOrderResult['mch_id'];
$result['prepayid'] = $unifiedOrderResult['prepay_id'];
$result['noncestr'] = $unifiedOrderResult['nonce_str'];
$result['timestamp'] = time();
$result['package'] = "Sign=WXPay"; //'Sign=WXPay'
$result['sign'] = $unifiedOrderResult['sign'];

但是,安卓、ios那边调用微信支付时居然显示空白,什么出错提示也没有,如下截图:

图片说明
图片说明
图片说明

将上面的交易类类改为扫码支付时,生成的二维码又是可以成功支付的

已经弄了一个多星期了,卡在这里一直动不了,求大神帮忙看看,这是什么问题,万分感谢

参考网址:

http://www.cocoachina.com/bbs/read.php?tid-321546.html

http://www.cnblogs.com/CrazySL/p/5585393.html

http://www.xl779.com/news/zhanchangxinwen/2016/0507/197.html

展开
收起
爱吃鱼的程序员 2020-06-03 15:11:38 1134 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    成功获取预支付ID后,再拿微信返回的数据进行重新二次签名,然后再发给APP调起支付
    ######

    如果还不行,就要重新设置一下密钥

    ######

    引用来自“kevin021788”的评论

    成功获取预支付ID后,再拿微信返回的数据进行重新二次签名,然后再发给APP调起支付
    对的,就是需要sign二次签名!前天已经解决了   谢谢你的答案
    2020-06-03 16:46:22
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
手淘iOS性能优化探索 立即下载
From Java/Android to Swift iOS 立即下载
深入剖析iOS性能优化 立即下载