使用支付宝开放平台进行app支付的时候,RSA2签名放在服务端php的编写方式
大家都知道,支付宝的支付sdk demo是将签名放在app端进行的,这是不安全的,应该放到服务端进行签名,但是支付宝提供的demo中并没有,我对此进行了修改,让其支持服务端签名
今天以安卓为例对官方demo进行修改,后端以php为例进行修改
final String orderInfo = getSigndatafromhttp(); final Runnable payRunnable = new Runnable() { @Override public void run() { PayTask alipay = new PayTask(PayDemoActivity.this); //orderino要从服务端获取 Map < String, String > result = alipay.payV2(orderInfo, true); Log.i("msp", result.toString()); Message msg = new Message(); msg.what = SDK_PAY_FLAG; msg.obj = result; mHandler.sendMessage(msg); } }; // 必须异步调用 Thread payThread = new Thread(payRunnable); payThread.start(); //请求处理,输出结果-response.body().show();此处的orderInfo从通过http从服务器上获取,此处是通过getSigndatafromhttp
php后端的签名如下
require_once dirname(__FILE__).DS."AopSdk.php"; $c = new\ AopClient(); $request = new\ AlipayTradeAppPayRequest(); $content['subject'] = $subject; //商品的标题/交易标题/订单标题/订单关键字等。 $content['out_trade_no'] = $out_trade_no; //商户网站唯一订单号 // $content['timeout_express'] = "30m";//该笔订单允许的最晚付款时间,逾期将关闭交易。取值范围:1m~15d。m-分钟,h-小时,d-天,1c-当天(1c-当天的情况下,无论交易何时创建,都在0点关闭)。 该参数数值不接受小数点, 如 1.5h,可转换为 90m。注:若为空,则默认为15d。 $content['total_amount'] = $total_fee; // 订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000], $content['product_code'] = "QUICK_MSECURITY_PAY"; // 销售产品码,商家和支付宝签约的产品码,为固定值QUICK_MSECURITY_PAY // $content['goods_type'] = "0";// 商品主类型:0—虚拟类商品,1—实物类商品注:虚拟类商品不支持使用花呗渠道 非必填参数 $con = json_encode($content); //$content是biz_content的值,将之转化成字符串 $param = array(); $param['app_id'] = $c - > appId; //支付宝分配给开发者的应用ID $param['method'] = 'alipay.trade.app.pay'; //接口名称 $param['charset'] = 'utf-8'; //请求使用的编码格式 $param['sign_type'] = 'RSA2'; //商户生成签名字符串所使用的签名算法类型 $param['timestamp'] = date("Y-m-d H:i:s"); //发送请求的时间,格式"yyyy-MM-dd HH:mm:ss" $param['version'] = '1.0'; //调用的接口版本,固定为:1.0 $param['notify_url'] = $this - > _notify_url; //支付宝服务器主动通知地址 $param['biz_content'] = $con; //业务请求参数的集合,长度不限,json格式 //生成签名 $paramStr = $c - > getSignContent($param); $sign = $c - > alonersaSign($paramStr, $c - > rsaPrivateKey, 'RSA2'); $param['sign'] = $sign; $str = $c - > getSignContentUrlencode($param); return $str;ok,这就解决了
网友评论0