移动支付文档中心:https://doc.open.alipay.com/doc2/detail?treeId=59&articleId=103563&docType=1
SDK下载地址: https://doc.open.alipay.com/doc2/detail?treeId=54&articleId=103419&docType=1
软件发布一年了,SDK更新了,那么你的软件也要跟着更新。
注意如果开发平台有集成流程,就按照开发平台的集成流程做就行了。按照集成流程详解去做,集成流程详解去做
-------------------------------------------------------------------------------------------------------------------------------------------------------------
本例讲三个例子:
1:运行支付宝的alipay_demo,
2:拷贝文件的方式调用支付宝
3:将支付宝变成model调用。
接入之前准备工作包括商户签约和密钥配置,
第一个例子:运行支付宝的alipay_demo
将alipay_demo导入Android Studio,选择Import project fromEclipse
这个时候有一个东西需要更新的,如下图所示
把上面的括号里面删除了,可以直接删除也可以通过f4,把Dependencies 里面的删除掉。
里面是
libs/alipaySdk-20160120.jar
libs/android-support-v13.jar
修改为:
---------------------------
在gradle里面添加
compile fileTree(dir: 'libs', include: ['*.jar'])
警告:PARTNER|RSA_PARIVATE|SELLER,原因是:
在PayDemoActivity:里面有。 下面的几个是公司给的或者是你帮公司申请的。
// 商户PID
public static final String PARTNER = "";
// 商户收款账号
public static final String SELLER = "";
// 商户私钥,pkcs8格式
public static final String RSA_PRIVATE = "";
// 支付宝公钥
// 商户合作ID 必须以 2088 开头
public static final String PARTNER = "2088601082136243";??// 收款人,支付宝账号 账号是固定的,一个商户一个账号?
public static final String SELLER = "xiexiewangkeji@163.com";??// 客户端使用的私钥,对于请求进行数字签名,传给服务器,服务器使用公钥进行验证?
public static final String RSA_PRIVATE = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAM62H9NVaAFL54uyqjNv11J7eeOsh/xRQ2c31zUXGmFvuq5iUVxahQBNKa5O3w4qoOdzCt6yw+Fcl9hN/9NV9pWiCUBzNBluUMyqTb2Qs+bULisevBk810Uevo/Cct+gu+6e2tTal2dXszAXK7tYjJqd5Rzmc/qJRzFPNn4j3W2NAgMBAAECgYEAwEDBHtPrNHF9O/+Cru5RLGSs++SmYTTPZLuZy8XeAkthK/lDRIrn8lzR7E1sxYc+OaVUscU/y2VL0KDS06K6/8gVCcJe4UiCjIBXyhmwNBKBHf4jlKKAlaWZkPwJSxpfE1O16epBvTHZdyEY0ALfMnvQlUZ8RAAXo5DHGutHscECQQD++08BYfWDhYVpDzlEcPM+9fyecen8vGiX/T0+LB88kREIldjiQmqJyBvKECRBUJYg+2mqHGQjQMfBHfaaUsC9AkEAz4l27Qps5e93EmNlDn3RsMH+JVzMu0442nA8SbpRJOtmuqYDZAH7W2uj3J3J1gIbZg5zCxQc9rLDYcq2wo21EQJBAK1x/ZgPLpa8qLeCZ44q1wwpACI3ktccwnlBBfvYv5bPhyqz48hlLVt0B5M3z7GuQ7FD0+inT2a7liXDYBAx4nECQD8SSsc9LN0wSmKXPGYMDMcIHcGjE0E1Q4f3JgtOCU0MEVtWCp/BDm+5JcJtXaKhX0xDxeivAyJiL4ivv50ezdECQHptoOYG0tMCHL0oOXrZXsdpAFL/c8vX25Oq/uaYaR+Zgv02ipt+81YQ+8nYTwD55TZytt0TcifqUQhDf0y7XyQ="; //注意了上面的这个RSA_PRIVATE 一定不能换行
支付宝一定要了解的内容
1:支付宝支付时候的签名机制:和oAuth 有很大的关系,有可能面试的时候可能会遇到
2:支付宝客户端错误码
3:Android 中PayTask 内部的参数orderInfo 必须要看
4:提交请求时的notify_url:让支付宝完成支付或者为完成支付的时候给商家服务器的
支付宝支付需要三个子系统:客户端,支付宝的服务器,商家(客户端自身的)服务器
9件以上85折, 注意这些都是服务器端计算的,而不是可以客户端计算.我之前写的订餐软件是在客户端计算的。
客户端下订单,服务器算好价格,客户端支付.
如果订单是100元,而我支付的是1块钱,怎么办呢? 这个是不是bug的部分呢?
服务器告诉我需要1000元钱,
客户端交1000元,给支付宝服务器
支付宝服务器返回已经扣款或者失败.
支付宝服务器告诉商家后台某一个订单已经支付成功了
2:将支付宝的demo内容拷贝到现有的项目工程中,最好的方法还是第三种方法,因为第三种方法不用我们自己去申请权限了。
新建一个项目
在布局文件中:添加一个button “下订单”下订单(从服务器获取订单信息,订单号,金额,打折信息,描述信息,然后将这里面的一些信息传送给支付宝,特别是订单号)
ali的libs 里面有jar包
把com 拷贝过来.
把res 里面的拷贝过来.跳过string
清单文件的操作:
权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
拷贝清单文件中activity内容到
<activity
android:name="com.alipay.sdk.pay.demo.PayDemoActivity"
android:icon="@drawable/msp_icon"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.alipay.sdk.pay.demo.H5PayDemoActivity"
android:configChanges="orientation|keyboardHidden|navigation"
android:exported="false"
android:screenOrientation="behind" >
</activity>
<!-- alipay sdk begin -->
<activity
android:name="com.alipay.sdk.app.H5PayActivity"
android:configChanges="orientation|keyboardHidden|navigation|screenSize"
android:exported="false"
android:screenOrientation="behind"
android:windowSoftInputMode="adjustResize|stateHidden" >
</activity>
在button 上面添加事件
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="btnAliPay"
android:text="支付宝支付"/>
public class OrderPayActivity extends AppCompatActivity {
private long mOrderNumber;
private float mTotalFee;
private String mOrderDes;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_order_pay);
Intent intent = getIntent();
mOrderNumber=intent.getLongExtra("orderNumber",0);
mTotalFee=intent.getFloatExtra("totalFee", 0);
mOrderDes=intent.getStringExtra("orderDes");
}
public void btnAliPay(View view) {
//开始 支付宝 支付
Intent intent = new Intent(this, PayDemoActivity.class);
startActivity(intent);
}
}
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
/**
* 下订单,从服务器获取订单信息,订单号,金额,打折信息,描述信息
* @param view
*/
public void btnOrder(View view) {
//TODO, 下订单 ,跳转到支付 界面
//模拟 订单号 ,从护短服务器返回来的
long orderNumber = 1000000000;
//总 金额
float totalFee = 100f;
String orderDes ="您的订单 我们已经收到了 ";
Intent intent = new Intent(this,OrderPayActivity.class);
intent.putExtra("orderNumber",orderNumber);
intent.putExtra("totalFee",totalFee);
intent.putExtra("orderDes",orderDes);
startActivity(intent);
}
}
在PayDemoActivity 里面,注意里面的TODO的项目,就是修改的地方
package com.alipay.sdk.pay.demo; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; import java.util.Random; import com.alipay.sdk.app.PayTask; import com.example.kodulf.myshoppay.R; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v4.app.FragmentActivity; import android.text.TextUtils; import android.view.View; import android.widget.Toast; public class PayDemoActivity extends FragmentActivity { // 商户PID public static final String PARTNER = ""; // 商户收款账号 public static final String SELLER = ""; // 商户私钥,pkcs8格式 public static final String RSA_PRIVA