支付宝商户私钥支付 私钥 去头去尾啥意思

1352人阅读
安卓学习(22)
最近接手了一个做支付的外包项目,前台和后台都要做,所以打算就此几个笔记。
在接通支付之前,我们还要做一些事情
这个签约部分需要实名认证的。我下面是签约完成的,添加你需要的功能,然后签约认证等待
生成公钥和私钥
生成公私钥的工具
按照我的箭头步骤来,官网说最好用2048的,然后点击”生成密钥“,这个时候你生成的密钥都会保存在RSA密钥文件夹下面,如果你下次要用的话,就打开文件夹里面找到应用公钥2048或是应用私钥2048。(这个工具其实你可以随便生成,想生成就怎么生成,只要你保证,你上传到支付宝的公钥和你服务器配置的公钥相同,并且私钥和公钥是匹配的就行,工具里面有个密钥匹配选项,可以匹配测试一下对不对)
公钥上传到支付宝
然后我们继续进开发者中心,找到自己新建的应用,选择“应用信息选项卡”。
这个地方我已经设置过公钥了,你们可以设置一下。然后配置基本就完成了。
android配置
代码的地方可以看这个,把权限、清单文件、混淆等都配置好,然后我们开车。
首先,下载一下官网给的,看第三方的demo还是比较好容易理解的,我们把androidDemo打开,主要来看PayDemoActivity.java这个类
PayDemoActivity.java 我们看支付这个方法,其他的不看了,没有用
* 支付宝支付业务
public void payV2(View v) {
* 这里只是为了方便直接向商户展示支付宝的整个支付流程;所以Demo中加签过程直接放在客户端完成;
* 真实App里,privateKey等数据严禁放在客户端,加签过程务必要放在服务端完成(多么体贴的一句话)
* 防止商户私密数据泄露,造成不必要的资金损失,及面临各种安全风险;
* orderInfo的获取必须来自服务端;
final String orderInfo="";
Runnable payRunnable = new Runnable() {
public void run() {
PayTask alipay = new PayTask(PayDemoActivity.this);
Map&String, String& result = alipay.payV2(orderInfo, true);
Log.i("msp", result.toString());
Message msg = new Message();
msg.what = SDK_PAY_FLAG;
mHandler.sendMessage(msg);
Thread payThread = new Thread(payRunnable);
payThread.start();
后端php配置
我后台使用的是php,其实其他配置都是一样的,主要看流程。
后端demo,然后我们要看看这个文档php部分的配置,java .NET都是这样的一个流程,配置好一些信息基本就ok了。
这个地方我遇到了一些坑,怪我自己没注意,列出来
(一)、php版本最少要php5.5以上的开发环境
(二)、去php的安装目录下面找到php.ini,打开该文件找到extension=php_openssl.dll,去电前面的分号,然后重启服务器,因为支付宝用的是https去验证返回的,所以,需要打开这个。
好了。来看服务端代码。
这个是官网给的demo样本,我们就跟着这个来
$aop = new AopC
$aop-&gatewayUrl = "/gateway.do";
$aop-&appId = "app_id";
$aop-&rsaPrivateKey = '请填写开发者私钥去头去尾去回车,一行字符串' ;
$aop-&format = "json";
$aop-&charset = "UTF-8";
$aop-&signType = "RSA2";
$aop-&alipayrsaPublicKey = '请填写支付宝公钥,一行字符串';
$request = new AlipayTradeAppPayRequest();
$bizcontent = "{\"body\":\"我是测试数据\","
. "\"subject\": \"App支付测试\","
. "\"out_trade_no\": \"test01\","
. "\"timeout_express\": \"30m\","
. "\"total_amount\": \"0.01\","
. "\"product_code\":\"QUICK_MSECURITY_PAY\""
$request-&setNotifyUrl("商户外网可以访问的异步地址");
$request-&setBizContent($bizcontent);
$response = $aop-&sdkExecute($request);
echo htmlspecialchars($response);
我们在支付宝demo中新建一个pay文件夹,然后里面新建一个orderInfo.php文件。
如图所示:
在新建的文件和文件夹中,我们将官网给出的代码粘贴进去,然后require_once引入下面要使用的类。
还是看代码舒服,看图不对劲。
require_once '../aop/AopClient.php';
require_once '../aop/request/AlipayTradeAppPayRequest.php';
$aop = new AopC
$aop-&gatewayUrl = "/gateway.do";
$aop-&appId = "app_id";
$aop-&rsaPrivateKey = '请填写开发者私钥去头去尾去回车,一行字符串' ;
$aop-&format = "json";
$aop-&charset = "UTF-8";
$aop-&signType = "RSA2";
$aop-&alipayrsaPublicKey = '请填写支付宝公钥,一行字符串';
$request = new AlipayTradeAppPayRequest();
$bizcontent = "{\"body\":\"我是测试数据\","
. "\"subject\": \"App支付测试\","
. "\"out_trade_no\": \"test01\","
. "\"timeout_express\": \"30m\","
. "\"total_amount\": \"0.01\","
. "\"product_code\":\"QUICK_MSECURITY_PAY\""
$request-&setNotifyUrl("商户外网可以访问的异步地址");
$request-&setBizContent($bizcontent);
$response = $aop-&sdkExecute($request);
echo htmlspecialchars($response);
插入一个小东西,订单号生成代码
function order()
$yCode = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J');
$orderSn = $yCode[intval(date('Y')) - 2011] . strtoupper(dechex(date('m'))) . date('d') . substr(time(), -5) . substr(microtime(), 2, 5) . sprintf('%02d', rand(0, 99));
return $orderSn;
填写完整后,我们来测试一下,访问这个链接,看看返回的是啥
app_id=1375&biz_content=%7B%22body%22%3A%22%E6%88%91%E6%98%AF%E6%B5%8B%E8%AF%95%E6%95%B0%E6%8D%AE%22%2C%22subject%22%3A+%22App%E6%94%AF%E4%BB%98%E6%B5%8B%E8%AF%95%22%2C%22out_trade_no%22%3A+%test01%22%2C%22timeout_express%22%3A+%2230m%22%2C%22total_amount%22%3A+%220.01%22%2C%22product_code%22%3A%22QUICK_MSECURITY_PAY%22%7D&charset=UTF-8&format=json&method=alipay.trade.app.pay&notify_url=http%3A%2F%2Fwww.%2F&sign_type=RSA2&timestamp=2017-04-07+20%3A13%3A33&version=1.0&sign=UYy7Kk7Jz4ZnSLa1vwasEv0MRcMMzt2dcfdXU9hWCkc0HyqjzdsU6c97ANp062XjI0YogqCXhTBLAEScnwj%2FkkNEjqeLfPn3Gaave0AExEIIruKclX1lXpMMVhotcwx%2FDLgsQvtRlyVShEOOBCib8AvXVPknNb4CEzsOg7R4Ee7RN8TBjZ46PdO786U9hbMuRDdgvn753j4yoTruUj2YGpl1SeauUeOsTFDbrHKbEFWxU%2BtrbrgeJreps0vZ2hcNBLkOag9rmx4gTWKGxV0eoQB%2FpcJjBsKLfkViWo9vs1Nxnfwso%2FxQk%2FRv37zftvRVgRPqHUXnZHveUXoBqbQm2g%3D%3D
相信用android端支付的,用android端直接进行支付的打印出的订单信息的格式肯定是和这个一样的是吧,那就对了。
好了,链接也测试通过了,那我们只需要通过android端,每次支付的时候,通过这个接口去获取订单信息,然后将这个信息通过支付宝API的
Map&String, String& result = alipay.payV2(orderInfo, true);
就可以进行支付了,下面我给出简洁后的android端代码。
public class PayDemoActivity extends FragmentActivity {
private static final int SDK_PAY_FLAG = 1;
private static final int SDK_AUTH_FLAG = 2;
@SuppressLint("HandlerLeak")
private Handler mHandler = new Handler() {
@SuppressWarnings("unused")
public void handleMessage(Message msg) {
switch (msg.what) {
case SDK_PAY_FLAG: {
@SuppressWarnings("unchecked")
PayResult payResult = new PayResult((Map&String, String&) msg.obj);
对于支付结果,请商户依赖服务端的异步通知结果。同步通知结果,仅作为支付结束的通知。
String resultInfo = payResult.getResult();
String resultStatus = payResult.getResultStatus();
if (TextUtils.equals(resultStatus, "9000")) {
Toast.makeText(PayDemoActivity.this, "支付成功", Toast.LENGTH_SHORT).show();
Toast.makeText(PayDemoActivity.this, "支付失败", Toast.LENGTH_SHORT).show();
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.pay_main);
* 支付宝支付业务
public void payV2(View v) {
Runnable payRunnable = new Runnable() {
public void run() {
URL url = null;
url = new URL("orderInfo.php的url地址");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String orderInfo = "";
while ((len = br.readLine()) != null) {
orderInfo +=
Log.i("orderInfo", orderInfo);
PayTask alipay = new PayTask(PayDemoActivity.this);
Map&String, String& result = alipay.payV2(orderInfo, true);
Log.i("msp", result.toString());
Message msg = new Message();
msg.what = SDK_PAY_FLAG;
mHandler.sendMessage(msg);
}catch(Exception e){
e.printStackTrace();
Thread payThread = new Thread(payRunnable);
payThread.start();
代码还是挺少的,就这样前端和后端打通了,接下来支付成功异步通知服务器什么的,就可以发挥大家自己的想法啦(反正我已经做好了,棒棒的,哈哈)。
大家在做测试的时候一想,每次都要我用0.01去测试数据,未免有点坑啊,心疼我的钱啊,刚开始不懂的时候我就充值了好几次,肉疼。
好了,下面给出沙箱测试的步骤,大致意思就是,支付宝会提供给你一个沙箱测试的账号的密码,而且还有指定的沙箱版支付宝APP,我们去下载一下这个支付宝APP,然后登陆支付宝给我们的账号,有买家和商家的账号都有,然后测试的时候,会唤起我们的这个沙箱版的支付宝,玩起来和真支付宝是一样的。
沙箱版支付宝测试
既然是拿来测试用的,免不了配置,沙箱版的配置和之前的应用配置是一模一样的。来看步骤。
首先还是进开发者中心,如图,选择沙箱应用。
和之前的配置是不是又那么点像呢,哈哈,沙箱版的支付宝网关和真实环境是不一样的,我们等会去替换他,还有appid,下面的密钥配置和之前步骤一样,打开密钥工具,随机生成一个2048的密钥,将公钥张贴进去。
我们继续往下滑动,下面会有一个沙箱版的app的二维码,我们扫描一下,把他下载下来。
好了,我们现在服务端文件夹中的pay文件夹重新新建一个sandboxOrderInfo.php
require_once '../aop/AopClient.php';
require_once '../aop/request/AlipayTradeAppPayRequest.php';
$aop = new AopC
$aop-&gatewayUrl = "/gateway.do";
$aop-&appId = "app_id";
$aop-&rsaPrivateKey = '请填写开发者私钥去头去尾去回车,一行字符串' ;
$aop-&format = "json";
$aop-&charset = "UTF-8";
$aop-&signType = "RSA2";
$aop-&alipayrsaPublicKey = '请填写支付宝公钥,一行字符串';
$request = new AlipayTradeAppPayRequest();
$bizcontent = "{\"body\":\"我是测试数据\","
. "\"subject\": \"App支付测试\","
. "\"out_trade_no\": \"test01\","
. "\"timeout_express\": \"30m\","
. "\"total_amount\": \"0.01\","
. "\"product_code\":\"QUICK_MSECURITY_PAY\""
$request-&setNotifyUrl("商户外网可以访问的异步地址");
$request-&setBizContent($bizcontent);
$response = $aop-&sdkExecute($request);
echo htmlspecialchars($response);
此处和之前只是环境的一样,只需要修改app_id,网关,和对应的公钥和私钥就行了。好了,服务端的又配置好了。
我们来打开开发者中心的“沙箱账号”。如图
沙箱会给我们一个商家的和买家的账号,便于我们测试用,看到充值那个选项没,真的好像是我的真实账号啊,想要多少就自己填,好爽。然后我们用这个账号登陆我们的沙箱版APP,登陆成功我们就不需要去管他了,就当他是我们真是的支付宝账号。
然后回到我们的android客户端,我们在onCreate初始化的时候加上这么一句代码,告诉支付宝,我们这是处于沙箱环境。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.pay_main);
EnvUtils.setEnv(EnvUtils.EnvEnum.SANDBOX);
然后我们将访问获取订单信息的url改成sandboxOrderInfo.php,然后进行访问获取,去支付,OK,大功告成。想怎么支付就怎么支付,好爽。
前端到后端结合还是挺简单的,跟着这个思想套路走,java和ASP都是一样的。
我要下楼去吃全套酸奶去了,味道啊!
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:29607次
排名:千里之外
原创:33篇
评论:52条
(1)(1)(2)(7)(1)(3)(1)(1)(5)(2)(1)(1)(1)(3)(5)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'君,已阅读到文档的结尾了呢~~
支付宝私钥生成流程
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
支付宝私钥生成流程
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口5330人阅读
前段时间集成了支付宝支付功能,集成很简单,但是参数设置走点弯路。记录一下,希望对大家有点帮助。
首先到支付宝开放平台下开发包资源,地址 找到移动支付功能下载。
解压后有demo里有openssl文件夹和安卓ios demo。集成很简单,把demo工程里的mainfest、几个类和相关布局复制过去就行。它的demo工程运行的时候会提示有几个参数是空的。
仔细看一下PayDemoActivity里有几个参数:// 商户PID
public static final String PARTNER = &&;
// 商户收款账号
public static final String SELLER = &&;
// 商户私钥,pkcs8格式
public static final String RSA_PRIVATE = &&;
// 支付宝公钥
public static final String RSA_PUBLIC = &&;
收款号就是你的收款支付宝帐号。公钥私钥是自己生成的,下面来看生成过程。打开刚才的openssl文件夹,里面应该有个生成命令.txt,按照它的步骤就行,我贴一下。打开openssl-&bin-&openssl.exe文件,会有个命令行输入,按下面操作
RSA密钥生成命令
生成RSA私钥
openssl&genrsa -out rsa_private_key.pem 1024
生成RSA公钥
openssl&rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
将RSA私钥转换成PKCS8格式
openssl&pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt
注意:“&”符号后面的才是需要输入的命令。
上面是它文档里写的,第一句的意思是生成私钥,执行后文件夹里会多多出rsa_private_key.pem文件;第二句是生成公钥,相应生成rsa_public_key.pem文件。这里把第三句后面加个 - out jiami.txt,修改后的命令就是openssl&pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out jiami.txt 目的是把转过格式的私钥输出到jiami.txt文件里,执行后文件夹会生成个jiami.txt文件,用的时候可以复制。pem文件可以用txt打开。用这三个文件里内容事去掉第一行和最后一行,不能包括,换行,空格,以及其他误加的字符,切记!
到这里公私钥就生成了,下面要把公钥上传到支付宝。点击“查看PID|KEY”,在新打开的页面(/order/pidAndKey.htm&),可查看到签约支付宝账号、合作者身份ID。商户PID参数就是这个。
输入支付密码进去,然后上传RSA公钥,在“合作伙伴密钥管理”下,点击“RSA加密”后的“添加密钥”,把自己的公钥复制进去。注意不能有空格,换行等特殊字符。这里要注意下浏览器的问题,我就是这里被火狐坑了,一直提示我公钥格式不对,然后换成ie浏览器就可以了。如果碰到这种情况记得换浏览器试试。
上传成功后支付宝公钥参数就ok了。然后商户私钥参数,注意看注释pkcs8格式的,也就是我们第三部生成的jiami.txt里的东西。到这里就可以运行支付宝支付了。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:12531次
排名:千里之外
原创:10篇
评论:18条
(1)(1)(1)(1)(1)(4)(2)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'支付宝公钥私钥配置 - 简书
支付宝公钥私钥配置
登录开发者平台
登录开发者
生成公钥私钥
AppledeMac-mini:~ apple$ openssl
//复制这句OpenSSL& genrsa -out rsa_private_key.pem 1024
//复制这句Generating RSA private key, 1024 bit long modulus...................++++++.........++++++e is 601)OpenSSL& rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
//复制这句 //到这里已经生成我们的公钥了writing RSA keyOpenSSL& pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt //复制这句生成 的 RSA private key 私钥 -----BEGIN PRIVATE KEY-----MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBANeRa2su2faHToTqiDufzYx7FGxw6cKd3GLjl919N18/I+KMYy5DvszvLacTCXj6amCWJvsLAM0RLyv8RYEgHJ13WiMC4VrT0/UCQhWxm30fo2IYAJSqJnDYQ4MAvccb63BAcqHYOEwnIUdk58+laGet5tzOMfFV3xTmNU6DiNE/AgMBAAECgYArE3wLpwkXImKmXNdsUrqYX9/s64NKyJDJkgE+2U6/UbayBqurCw6NlR3iTQOPkTrAokCX2dMHJ2/tsjORYgFVd+C1tU8TQx6OvSnU8jo8EUhQ06/RG4BvHAxzXoiAdMEvHZDMY8HHwsABIZwQFNkivE5GIxdo/y9w1GdP5v7yAQJBAP3mLLStWq9WtKRMBcoyPXHMKb+prinKHKfw7+wcGjIDWGmZNnUo+H4VjvheP1uYhtSK1yHkKhvsrbYfa8xpjWECQQDZWgy1ApJ5hsEnh00ggdWVC+FRSiO9KewbJCPVYHu03EnoDZ0HJF6szbd0QUgFctaT58gH/hla7252dJHl50KfAkEAnuy6wwVXpDUDsWucnCnCaD7BSyUszR+jvEOGCia1BuUtLDwo6EES+ekIqtJjmjPpAZU+gApPiVcmjL8yPKs9QQJAMN8enFTHuquiItE5dmW7MJhLQYv6HT6f6DpoFEJtjm058QOem0yCPTjEV0+WciMwPHGReLqZ2OidXeU4KQmm4QJBALt0I0bDw1z2zzSPVeNjozIiG/6rSWBy+Fb2WYFsmuOEM2iMJnCy04V7XvRtursI10B9/5kbf/ZakK8Nzy6Ajj0=-----END PRIVATE KEY-----
最后公钥是这样的可以上传到支付宝官方了MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDXkWtrLtn2h06E6og7n82MexRscOnCndxi45fdfTdfPyPijGMuQ77M7y2nEwl4+mpglib7CwDNES8r/EWBIBydd1ojAuFa09P1AkIVsZt9H6NiGACUqiZw2EODAL3HG+twQHKh2DhMJyFHZOfPpWhnrebczjHxVd8U5jVOg4jRPwIDAQAB

我要回帖

更多关于 支付宝公钥私钥生成 的文章

 

随机推荐