81,092
社区成员
发帖
与我相关
我的任务
分享
遇到了,刚解决。我是在数据库中加了一个标识列,存回调传过来的我事先设置的参数。然后查询数据库这个参数是否存在,存在就直接return true.
//查询订单
public function Queryorder($transaction_id)
{
$input = new WxPayOrderQuery();
$input->SetTransaction_id($transaction_id);
$result = WxPayApi::orderQuery($input);
Log::DEBUG("query:" . json_encode($result));
if (array_key_exists("return_code", $result)
&& array_key_exists("result_code", $result)
&& $result["return_code"] == "SUCCESS"
&& $result["result_code"] == "SUCCESS") {
$orderId = $result["attach"];
$dbms = 'mysql'; //数据库类型
$host = ''; //数据库主机名
$dbName = ''; //使用的数据库
$user = ''; //数据库连接用户名
$pass = ''; //对应的密码
$dsn = "$dbms:host=$host;dbname=$dbName";
$db = new PDO($dsn, $user, $pass);
$sql = "SELECT * FROM `money` WHERE order_id = '" . $orderId . "'";
$money = $db->query($sql);
$moneyResult = $money->fetchAll();
if(sizeof($moneyResult) > 0){
return true;
}
try {
$db->beginTransaction();
$update = 'UPDATE `order` set pay_status=1 where id = ' . $orderId . ';';
$update .= $this->fenrun($db, $orderId);
//var_dump($update);exit;
$db->exec($update);
$db->commit();
return true;
} catch (Exception $e) {
$db->rollBack();
return false;
}
}
return false;
}
public void zfbCallBack(){
System.out.println("阿里云-支付宝回调---------------------开始");
Map<String, Object> map=new HashMap<String, Object>();
HttpServletResponse response = getResponse();
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
PrintWriter out = null;
try {
out = response.getWriter();
Map<String, String> params = new HashMap<String, String>();
Map<String, String[]> requestParams = getRequest().getParameterMap();
System.out.println("requestParams=="+requestParams);
for (Iterator<String> iter = requestParams.keySet().iterator(); iter.hasNext();) {
String name = (String) iter.next();
String[] values = (String[]) requestParams.get(name);
String valueStr = "";
for (int i = 0; i < values.length; i++) {
valueStr = (i == values.length - 1) ? valueStr + values[i]
: valueStr + values[i] + ",";
}
params.put(name, valueStr);
}
//商户名称
//String order_name = new String(getRequest().getParameter("subject").getBytes("ISO-8859-1"),"UTF-8");
//商户订单号
String out_trade_no = new String(getRequest().getParameter("out_trade_no").getBytes("ISO-8859-1"),"UTF-8");
//String out_trade_no="201601042039377000001";
map.put("oid", out_trade_no);
//支付宝交易号
//String trade_no = new String(getRequest().getParameter("trade_no").getBytes("ISO-8859-1"),"UTF-8");
//交易状态
String trade_status = new String(getRequest().getParameter("trade_status").getBytes("ISO-8859-1"),"UTF-8");
//String trade_status="TRADE_SUCCESS";
//用户id
//String buyer_email = new String(getRequest().getParameter("buyer_email").getBytes("ISO-8859-1"),"UTF-8");
//String body = new String(getRequest().getParameter("body").getBytes("ISO-8859-1"),"UTF-8");
//if(true){//验证成功 AlipayNotify.verify(params)
//System.out.println("订单号"+out_trade_no);
//System.out.println("交易状态="+trade_status);
//System.out.println("连接地址==="+MASTERINFO.get("url_o").toString());
if(trade_status.equals("TRADE_FINISHED")||trade_status.equals("TRADE_SUCCESS")){
//System.out.println("---------------------支付宝回调参数---------"+"修改数据" );
String url=MASTERINFO.get("url_o").toString()+"goodOrder_GoodsOrderResultAction_goodsOrdResult.action";
//System.out.println("url地址==="+url);
String content="orderNum="+out_trade_no;
String result_str=Utils.getHttpResult(url, content, "POST");
System.out.println("result_str="+result_str);
//String msgString=httpPost(MASTERINFO.get("agent_callback").toString(), map);
JSONObject obj=JSONObject.fromObject(result_str);
if(obj.getInt("recode")==0){
System.out.println("recode=0-服务器结果:"+obj.getString("msg"));
}else{
System.out.println("recode=1-服务器结果:"+obj.getString("msg"));
}
}
out.println("success");
} catch (Exception e) {
e.printStackTrace() ;
}finally{
out.flush();
out.close();
}
}